5

ファイルで CURL PUT を実行しようとしていますが、問題があります。

これが私のコードです:

$url_path_str = 'http://my_url';
$file_path_str = '/my_file_path';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, ''.$url_path_str.'');
curl_setopt($ch, CURLOPT_PUT, 1);

$fh_res = fopen($file_path_str, 'r');
$file_data_str = fread($fh_res, filesize($file_path_str));

curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path_str));
fclose($fh_res);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_response_res = curl_exec ($ch);

スクリプトがタイムアウトし続けるのですが、その理由がわかりません。

助けていただければ幸いです。ありがとう。

4

3 に答える 3

14

私はこれを理解しました。問題を引き起こしたのはたまたま fclose でした。curl_exec の後に置くだけです。

修正されたコードは次のとおりです。

$url_path_str = 'http://my_url';
$file_path_str = '/my_file_path';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, ''.$url_path_str.'');
curl_setopt($ch, CURLOPT_PUT, 1);

$fh_res = fopen($file_path_str, 'r');

curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path_str));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_response_res = curl_exec ($ch);
fclose($fh_res);

これが後で他の誰かに役立つことを願っています。

乾杯。

于 2011-09-08T13:22:06.203 に答える
0

fread()これが問題であると 100% 確信しているわけではありませんが、必要のないときにファイルの内容を読み取っていて、データに対して何もしていないことがわかります。これにより、ポインターはファイルの末尾に残り、cURL はポインターから取得できないデータを待機します。

この行を削除して、まだ問題があるかどうかを確認してください:

$file_data_str = fread($fh_res, filesize($file_path_str));

または、実際にファイルからのデータが必要$file_data_strで、スクリプトの後半で変数を使用している場合は、上記の行の直後に次の行を配置します。

rewind($fh_res);

編集

また、これについてはまったくわかりません。-これ''.$url_path_str.''を実行できるはずで$url_path_str、同じ効果がありますが、リソース効率が(わずかに)向上します。

于 2011-09-07T21:46:54.287 に答える
0

接続がタイムアウトしていることだけが確実な場合は、次のコード行を追加できます。

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 );
于 2011-09-08T13:47:02.260 に答える