当通过debian执行失败时,手动php脚本执行工作正常

当通过debian执行失败时,手动php脚本执行工作正常,php,curl,ssh,cron,webmin,Php,Curl,Ssh,Cron,Webmin,我在使用定时cron作业运行脚本时遇到问题。问题是,当我使用浏览器运行php脚本时,它的执行没有任何问题/失败等。 但是,当我尝试使用cron或SSH运行它时,会出现奇怪的错误: 注意:未定义索引:第125行/home/loves/public\u html/parser/shop\u parse\u class.php中的HTTP\u USER\u AGENT PHP注意:未定义的偏移量:第481行/home/loves/public_html/parser/shop_parse_class.

我在使用定时cron作业运行脚本时遇到问题。问题是,当我使用浏览器运行php脚本时,它的执行没有任何问题/失败等。 但是,当我尝试使用cron或SSH运行它时,会出现奇怪的错误:

注意:未定义索引:第125行/home/loves/public\u html/parser/shop\u parse\u class.php中的HTTP\u USER\u AGENT PHP注意:未定义的偏移量:第481行/home/loves/public_html/parser/shop_parse_class.PHP中的0 PHP注意:未定义的偏移量:第482行/home/loves/public_html/parser/shop_parse_class.PHP中的1 PHP注意:未定义变量:第538行的cat in/home/loves/public_html/parser/shop_parse_class.PHP


从错误中可以看出,例如,CURL不存在HTTP\u USER\u AGENT选项,这有点奇怪。可能是环境变量的问题,但是我对linux系统的了解很差。

您应该将
-A
-user-agent
参数添加到cURL调用中。
您可以通过这种方式将任何需要的内容设置为用户代理。

HTTP\u user\u代理是浏览器返回的信息,如果您像脚本一样运行,则无法使用此数组。这就是数组为空的原因(消息告诉您尝试在数组中使用的索引不存在)

我认为问题在于他试图通过命令行执行为网站编写的脚本,因此正常的HTTP环境不存在。如果没有指定其他用户代理,curl通常会添加一个类似于“curl/7.21.6”的用户代理字符串。那么我如何使其成为一个正常的HTTP环境呢?我有一个使用curl调用的PHP脚本,我设置了自己的用户代理,所以我会检查是否是我的脚本进行调用,方法是:curl-a“MyCompanyName curl”“MyURL.com”,然后,php脚本使用:$userAgent=isset($\u SERVER['HTTP\u USER\u AGENT'])检查它$_服务器['HTTP_用户_代理]]:null@Jester我不是直接在php脚本中使用CURL。@OlegBondarenko那么这就是问题所在,在这一点上,如果您没有使用浏览器或CURL调用php,就没有设置$\u服务器['HTTP\u USER\u AGENT']。您是如何调用它的?您是通过命令行执行php脚本的吗?如果是这种情况,PHP在通过网站执行时通常提供的http特定环境(如
$\u SERVER['http\u USER\u AGENT']
)将不存在。@Joe这是我为CURL
CURL\u setopt($ch,CURLOPT\u USERAGENT,$\u SERVER['http\u USER\u AGENT')设置的选项这是一个PHP通知,不是一个PHP错误。@Jocelyn但在此之后失败(退出)。正如Jocelyn所指出的,当curl无法检索页面时,我有die()命令,所以这些只是通知。很可能您的脚本一直存在导致这些问题的问题,并且当您移动到新服务器时,其配置不会隐藏这些问题。它们也可能与curl请求失败无关。如果对
curl\u exec()
的调用失败并返回false,您应该将curl句柄传递给,看看它对失败原因的解释。Bruno,也许您是对的。然而,问题是我在以前的主机上运行这个脚本(通过Cpanl/crons)没有问题,但是当我使用webmin/virtualmin而不是Cpanel迁移到虚拟服务器主机时,我似乎无法让它工作。在PHP文档中,信息可以是空的。在使用HTTP\u USER\u代理之前,请尝试使用“isset()”验证是否为null,并查看是否工作正常。更好的方法是,尝试使用以下命令:array\u key\u exists('HTTP\u USER\u AGENT',$\u SERVER)