Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php curl停止脚本执行_Php_Curl_Curl Multi - Fatal编程技术网

Php curl停止脚本执行

Php curl停止脚本执行,php,curl,curl-multi,Php,Curl,Curl Multi,我的脚本使用curl通过将图像上传到站点。 我在一个文件夹中循环并上传其中的每个图像。但在3-4次上传后,curl_exec将失败,停止所有操作并阻止其他图像上传 $upload_array = array( "method" => "smugmug.images.upload", "SessionID" => $session_id, "AlbumID" => $alb_id, "FileName" => zerofill($n, 3)

我的脚本使用curl通过将图像上传到站点。 我在一个文件夹中循环并上传其中的每个图像。但在3-4次上传后,curl_exec将失败,停止所有操作并阻止其他图像上传

$upload_array = array(
    "method" => "smugmug.images.upload",
    "SessionID" => $session_id,
    "AlbumID" => $alb_id,
    "FileName" => zerofill($n, 3) . ".jpg",
    "Data" => base64_encode($data),
    "ByteCount" => strlen($data),
    "MD5Sum" => $data_md5);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $upload_array);
curl_setopt(
    $ch, CURLOPT_URL, 
    "https://upload.smugmug.com/services/api/rest/1.2.2/");
$upload_result = curl_exec($ch); //fails here
curl_close($ch);
更新: 所以我在脚本中添加了日志记录。当它确实失败时,fwrite($fh,“begin curl\n”)

fwrite($fh, "begin curl\n");
$upload_result = curl_exec($ch);
fwrite($fh, "curl executed\n");
fwrite($fh, "curl info: ".print_r(curl_getinfo($ch,true))."\n");
fwrite($fh, "xml dump: $upload_result \n");
fwrite($fh, "curl error: ".curl_error($ch)."\n");
我也

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60*60);

不确定问题是什么。。。当它失败时,响应是什么?系统和apache日志是怎么说的


现在如果我是你,我就不会在循环中使用
curl\u init()
curl\u close()
。相反,我会在循环之前初始化,然后在循环之后关闭-然后在循环itsef中使用
curl\u set\u opt
来设置url和不同的参数,只需调用
curl\u exec()
。这甚至可能是因为所有这些句柄都超过了某种系统限制之类的问题。如果您需要/想要使用多个连接,您可以使用
curl\u multi
或编写一些管理函数/类来管理多个句柄。

我们可能需要更多信息才能提供帮助,但听起来可能是超时问题

打开错误报告或检查错误日志,以查看是否引发了任何问题

尝试使用
CURLOPT\u timeout


还要检查脚本超时是否足够,或者是否随着
set\u time\u limit()

的增加而增加。您可以尝试直接输出是否有效:

$upload_result = curl_exec($ch); //fails here

$error = curl_error($ch();    
if ($error) echo "CURL Error: $error";

curl_close($ch);
如果没有帮助,请检查您的
phpinfo()
查看是否全局关闭错误报告(查看
显示错误设置)。

CURL包括“多”(用于多个资源)选项,用于处理多个高延迟请求(例如上载图像)

见: 以及此处描述的整个“多”函数库:

有关库的多资源部分的完整示例,请参见:

1-强制卷曲,告诉您更多关于它的功能

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HEADER, true);
2-如果未处于安全模式,请确保PHP在脚本开头显示错误:

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);

是否出现任何错误?可能您的脚本超出了时间限制。是否已打开错误报告和错误显示或日志记录?您使用过curl\u getinfo()和curl\u errmsg()吗?我没有访问apache日志的权限。它只是停了。@prodigitalson-我想你是想说“…我不会在循环中使用curl\u init()和curl\u close()。@Funky Dude:然后你需要暂时打开
显示错误
,看看你是否能从curl获得返回给你的响应内容。没有任何关于其失败原因的信息,我们只是猜测。@prodigitalson:错误显示和报告处于打开状态。它在curl_exec之前显示错误。当它失败时,curl_exec会停止所有操作,而不显示任何内容。
<?php

$curl_str = "curl -k -o /my/path/curl_output.log -d 'var1=".$value1."&var2=".$value2."& etc...' https://upload.smugmug.com/services/api/rest/1.2.2/";
$r = exec($curl_str);