2011-10-28 7 views
0

こんにちは私はここでいくつかの質問を見ましたが、どれも私の問題を解決していません。私は自分のサイトに、ユーザーにいくつかの異なるタイプの電子メールを生成するために使用したいスクリプトを用意しています。私は関連情報を記入する$ _POST変数を受け入れるさまざまな電子メール用のテンプレートファイルを作成し、これらのテンプレートへの投稿要求を作成し、電子メールの本文として返す返信を得る方法を望んでいました。私はテンプレートファイルの場所を受け入れる関数を書くことを試みています(相対的または絶対的などちらでも動作しますが、正直なところが好きです)、投稿経由でテンプレートに送信したいパラメータの配列があります。今まで私は運がなかった。ここに私のコードは、これまでです:私のサイトのあるページからPHPとCurlを使って別のページにPOSTリクエストをしようとしています

private function post_request($url, $data) { 
    $output = array(); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    if ($result) { 
     $output['status'] = "ok"; 
     $output['content'] = $result; 
    } else { 
     $output['status'] = "failure"; 
     $output['error'] = curl_error($ch); 
    } 
    curl_close($ch); 
    return $output; 
} 

私はエラーを取得してきたカールから「ホストに接続できませんでした」が、エラーログに私のURLを出力した後、私はそれのコピーと貼り付けを確認することができましたfirefoxのURLがページを正しく表示します。

アイデア?私はカールを使用するという考えに結婚していないので、より良い選択肢があれば、私はそれを代わりに使用するよりも喜んでいます。すべての助けをありがとう!

答えて

0

、問題は、サーバーの構成エラーになってしまいました。間違ったDNSサーバーに接続していたため、サーバーがファイルにアクセスしようとしたときにタイムアウトしました。私の問題を解決した修正!

0

あなたのホストが遠隔地へのアクセスを妨げていない限り($ urlスクリプトはPOSTデータを排他的に見ていない)限り、file_get_contents()を使用することができます。

private function post_request($url, $data) { 
    $output = array(); 

    $url_with_data = ''; 
    foreach ($data as $k=>$v){ // Loop through data and create request string 
     $url_with_data .= '&' . $k . '=' . $v; 
    } 

    // Remove first ampersand and encode the data 
    $url_with_data = urlencode(substr($url_with_data, 1)); 

    // Request file 
    // Format will be http://url.com?var1=data&var2=data&var3=data 
    $result = file_get_contents($url . '?' . $url_with_data); 

    if ($result) { 
     $output['status'] = "ok"; 
     $output['content'] = $result; 
    } else { 
     $output['status'] = "failure"; 
     $output['error'] = 'Could not open remote file'; 
    } 
    return $output; 
} 
0

別のオプション:両方のファイルが同じサーバーに存在するとします。そうであれば、単にテンプレートビルダをrequire()することができます。 template_builder.phpで次に

private function post_request($url, $data) { 
    $output = array(); 

    @require_once('./path/to/template_builder.php'); 

    if ($result) { 
     $output['status'] = "ok"; 
     $output['content'] = $result; 
    } else { 
     $output['status'] = "failure"; 
     $output['error'] = 'Could not open remote file'; 
    } 
    return $output; 
} 

:結局のところ

<?php 

unset($result); 

if (is_array($data)){ 
    // Parse $data ... 
    $result = $email_template; 
} 
関連する問題