Почему команда оболочки wget backticks работает в PHP CLI, а не в скрипте PHP?

просто для удовольствия я пытаюсь сделать загрузку wget из php cli (/ usr / bin / php -a), и это работает:

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 из командной строки (так что я думаю, что это не должно быть проблемой разрешений).

Почему, если я использую скрипт .php и вызываю wget внутри скрипта, файл не сохраняется?

Спасибо за внимание!

PS: пожалуйста, не говорите мне, что я могу использовать curl для такой задачи, я знаю, что могу, мне просто интересно узнать, как я могу сделать что-то подобное без использования инструментов PHP, вот и все

0

Решение

использовать полный путь к wget, так как демон не работает .bash_profile,

`/opt/local/bin/wget -q -nd -O /Users/user/path/to/file.html http://host.com/some_file.html`;

Кстати, нет необходимости бежать / в командных оболочках.

1

Другие решения

Оператор backtick запускает команду оболочки и возвращает вывод команды shell.

В этой ситуации простое ведение журнала (или, если необходимо, повторение) результата, вероятно, покажет ошибку. Например:

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

trigger_error($result, E_USER_NOTICE);
0

По вопросам рекламы [email protected]