просто для удовольствия я пытаюсь сделать загрузку 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, вот и все
wget
нет в$PATH
пользователя apache? - person Barmar   schedule 27.12.2014wget
должен быть в пути, потому что пользователь apache — это тот же пользователь, который я использую для запуска командыphp
CLI. - person tonix   schedule 27.12.2014.profile
и.bashrc
, в которых обычно устанавливаются переменные среды. Таким образом, даже если это один и тот же идентификатор пользователя, среда не будет прежней. - person Barmar   schedule 27.12.2014safe_mode
? Это отключает обратные кавычки.shell_exec
работает? - person Barmar   schedule 27.12.2014whoami
илиpwd
, я могу повторить вывод, я думаю, это проблема: у меня установлен wget с HomeBrew (я использую OS X) внутри/opt/local/bin/wget
./opt/local/bin/
добавляется к переменной env $PATH внутри моего файла .bash_profile, который загружается всякий раз, когда я открываю Terminal.app. Поскольку я выполняю команду оболочки из PHP, .bash_profile не выполняется, поэтому я заканчиваю очень скудной переменной среды $PATH (/usr/bin:/bin:/usr/sbin:/sbin
, если я вывожу переменную $PATH из скрипта PHP), и оболочка не находит команда wget. - person tonix   schedule 27.12.2014<?php `cd ~ && pwd && . .bash_profile && wget -q -nd -O /Users/user/path/to/file.html http:\/\/host.com/some_file.html`;
- person tonix   schedule 27.12.2014