PHP CURL PUT来自文件路径

时间:2011-09-07 21:38:07

标签: php curl put

我正在尝试使用文件进行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);

脚本保持超时,我不知道为什么。

我很感激一些帮助。感谢。

3 个答案:

答案 0 :(得分:11)

我想出来了。碰巧是导致这个问题的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);

希望以后对别人有所帮助。

干杯。

答案 1 :(得分: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并且它会产生相同的效果,但是(略微)更有资源效率

答案 2 :(得分:0)

如果您完全确定连接正在超时而没有别的..那么您可以添加以下代码行 -

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 );