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

我不是 100% 确定这是问题所在,但我能看到的唯一问题是您在fread()不需要时读取文件的内容,并且没有对数据做任何事情。这会将指针留在文件末尾,并且 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 回答