CURLOPT_FILE
PHP の cURL は、出力を 経由で文字列に送信するように指示されたときと同様に、 経由でファイルに出力するように指示されたときに異なるデータを返すことに気付きましたCURLOPT_RETURNTRANSFER
。
_RETURNTRANSFER
標準の HTML コードとして表示するために解析するかのように、改行と余分な空白を削除するようです。 _FILE
一方、意図したとおりにファイルを保存します。
php.net のドキュメントを読みましたが、問題を解決するようなものは見つかりませんでした。理想的には_RETURNTRANSFER
、正確な内容を返して中間ファイルを削除できるようにしたいのですが、これを可能にする方法がわかりません。
これが私が使用しているコードです。問題のデータは、\r\n 行末の CSV ファイルです。
function update_roster() {
$url = "http://example.com/";
$userID = "xx";
$apikey = "xxx";
$passfields = "userID=$userID&apikey=$apikey";
$file = fopen("roster.csv","w+");
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $passfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $file);
$variable_in_question = curl_exec ($ch);
curl_close ($ch);
fclose($file);
return $variable_in_question;
}
結局のところ、エラーは返されたものではなく、解析しようとしていた方法にあります。\r\n は、一重引用符で囲んだときに期待どおりに解析されません。二重引用符に切り替えると、問題が解決しました。これがそのような関数呼び出し内で違いを生むことに気づいていませんでした。
これはうまくいきます:$cresult = split("\r\n", $cresult);
これはしません:$cresult = split('\r\n', $cresult);