我正在尝试使用文件进行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);
脚本保持超时,我不知道为什么。
我很感激一些帮助。感谢。
答案 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 );