为什么wget backticks shell命令在PHP CLI中工作而不在PHP脚本中?

时间:2014-12-27 16:02:00

标签: php shell wget shell-exec

只是为了好玩我试图从php cli(/ usr / bin / php -a)进行wget下载并且它有效:

php > `wget -q -nd -O /Users/user/path/to/file.html http:\/\/host.com/some_file.html`;
php > // a HTML file is downloaded and its content is placed into /Users/user/path/to/file.html

但是,当我尝试从PHP脚本执行相同的操作时,它不起作用:

<?php 
 `wget -q -nd -O /Users/user/path/to/file.html http:\/\/host.com/some_file.html`;
 // After requesting the script from the browser and after the script is executed, the file doesn't exist on the specified path

我想说执行apache并因此执行PHP服务器端脚本的用户与从命令行执行php命令的用户相同(所以我想这不应该是权限问题)。< / p>

为什么我使用.php脚本并在脚本中调用wget文件未保存?

感谢您的关注!

PS:拜托,请不要告诉我,我可以使用curl进行这样的任务,我知道我可以,我只是很想知道如何在不使用PHP工具的情况下做类似的事情,就是这样

2 个答案:

答案 0 :(得分:1)

使用wget的完整路径,因为守护程序不会运行.bash_profile

`/opt/local/bin/wget -q -nd -O /Users/user/path/to/file.html http://host.com/some_file.html`;
顺便说一下,没有必要在shell命令中转义/

答案 1 :(得分:0)

反引号运算符运行shell命令并返回shell命令的输出。

在这种情况下,只需记录(或者如果必须,回显)结果可能会显示错误。 E.g:

$result = `wget -q -nd -O /Users/user/path/to/file.html http:\/\/host.com/some_file.html`;

trigger_error($result, E_USER_NOTICE);