2014-12-04 64 views
0

我有一个bash脚本,现在我需要将其转换成PHP作为CGI script.See我有一个bash线这样PHP相当于退出状态在bash

wget http://repo.domain/sources/latest_version.tar.gz > /dev/null 2>&1; 
if [ $? != 0 ] 
then 
echo "Could not download file..."; 
exit 0; 
fi 

如果我运行wget使用php system/exec,是否有一种方法可以捕获退出状态,如在此脚本中使用$??我已阅读该文件下载可以使用file_put_contents()在这里stackoverflow post这里。但我也关注allow_fopen_url Off部分作为提到的意见之一。我想我需要一个更通用的解决方案,保持从bash到php的最小变化最小。

我怎样才能在这里看到退出状态?请提出任何提示?

+1

PHP中加载外部文件的默认方法是使用[cURL](http://php.net/cURL)。永远不要使用'file_get_contents()'来访问不在你自己的服务器上的东西。这可能由于配置而中断。是的,你可以在PHP中获得执行shell命令的返回值。但这已经很好了[在PHP手册中描述](http://php.net/exec)。 – feeela 2014-12-04 10:32:31

+0

是的,但是人们可以删除cURL吗?这就是为什么我认为坚持执行功能 – 2014-12-04 10:35:48

+0

是的,人们也可以删除PHP。通过配置保护您的服务器或随机删除库是有区别的。在这种情况下,cURL只是程序运行所需的任何其他库的依赖关系。 – feeela 2014-12-04 10:39:01

回答

1

有一个exit函数。从PHP documentation

void exit ([ string $status ]) 
void exit (int $status) 

终止脚本的执行。即使退出被调用,关闭函数和对象析构函数也会一直执行。

exit是一种语言结构,如果没有状态传递,它可以不带圆括号被调用。

所以你的情况这将是exit(0)

编辑:嗯,据我看到它,wget的是Linux shell命令不是PHP,你也许可以运行它,并得到输出?

exec('wget http://repo.domain/sources/latest_version.tar.gz > /dev/null 2>&1', $output, $return_var); 

同样,根据docs

return_var 如果return_var参数是与所述输出参数一起存在,则返回状态被执行命令的将被写入到这个变量。

+0

谢谢你的回应。我见过'exit'但是我不清楚,它不会停止执行其余的代码? – 2014-12-04 10:38:57

+0

'exit'暂停当前PHP脚本并将退出代码返回给调用实例。但问题是如何获得由另一个程序返回的退出代码,如'wget'。 – feeela 2014-12-04 10:40:19

+0

我误解了这个问题,更新了我的答案。 – 2014-12-04 11:11:01