У меня есть эта программа PHP в папке /var/www для запуска сценария оболочки и загрузки файла HTML, созданного этим сценарием оболочки. Если я запускаю сценарий оболочки вручную из командной строки, он работает как шарм, но при запуске через программу PHP из браузера он создает только пустой файл.
PHP-КОД
$a = './script.sh '.$foo.' '.$bar;
$b = shell_exec($a);
include '/var/tmp/reports/r.html';
СЦЕНАРИЙ ОБОЛОЧКИ
cat file.ext | awk <something with $foo and $bar> | command > /var/tmp/reports/r.html
(Редактировать ^ "file.ext" на самом деле является файлом .log. Он расположен в /var/log/.. А "command" - это другая программа, которая создает файл .html из этого файла журнала) эм>
Права доступа к моим файлам:
-rw-r--r-- 1 abc www-data 848 Feb 13 10:43 php.php
-rwxr-xr-x 1 ubuntu www-data 230 Feb 13 10:51 script.sh*
И /var/tmp/reports/r.html не существует до выполнения PHP. После выполнения скрипта напрямую через командную строку он создает файл r.html, например:
-rw-rw-r-- 1 ubuntu ubuntu 121884 Feb 13 11:42 r.html
Но когда скрипт выполняется через PHP из браузера, он создает пустой файл, подобный этому
-rw-r--r-- 1 www-data www-data 0 Feb 13 11:43 r.html
Edit1: по предложению @lurker я попытался изменить script.sh на
#!/bin/sh
cat file.log | awk '{if(substr($5,2)>="'$1'" && substr($5,2)<="'$2'")print $0}' | awk 'gsub(",", "", $1);' | /usr/bin/command > /var/tmp/reports/r.html
Он также создал только пустой файл.
Edit2: я изменил скрипт на ->
#!/bin/bash
sudo echo "sdfsf" > /var/tmp/reports/r.html
Даже это не сработает.
shell_exec($output)
... что такое$output
? Разве это не должно бытьshell_exec($a)
? - person lurker   schedule 13.02.2015file.ext
? И определен лиcommand
в PATH, с которым работает PHP? Похоже, что./script.sh
выполняется, но что-то не работает в командной строке внутри скрипта, поэтому> ...
создает файл, но выполнение того, что его заполняет, не выполняется. - person lurker   schedule 13.02.2015script.sh
не знал, где он находится при выполнении из PHP. Где определяетсяcommand
? Он может быть в вашем PATH при запуске из оболочки, но не в PATH, который PHP видит при выполнении. Эти ПУТИ разные. В вашемscript.sh
вы должны попробовать/path/to/command
вместоcommand
, чтобы посмотреть, решит ли это проблему (/path/to
— это полный путь, в котором находитсяcommand
). - person lurker   schedule 13.02.2015awk
. Что если показать код частиawk
? - person fedorqui 'SO stop harming'   schedule 13.02.2015awk
заключается в том, что им может потребоваться экранирование$i
для работы, если они вызываются с другой платформы, например PHP:\$i
и т. д. - person fedorqui 'SO stop harming'   schedule 13.02.2015script.sh
или просто указать полный путь к команде, как я указал в своем последнем комментарии. - person lurker   schedule 13.02.2015awk
? Трудно сказать, не зная, что такое ПУТЬ. Попробуйте также тестовый пример, временно удаливawk
из вашего скрипта и простоcat
файл на выходе, и посмотрите, работает ли это. Другими словами, разбейте проблему методом исключения, чтобы вы могли определить, где она находится. - person lurker   schedule 13.02.2015/var/tmp/reports
? - person lurker   schedule 13.02.2015drwxrwxrwx 2 root root 4096 Feb 15 10:21 reports/
. - person Sumit Sinha   schedule 15.02.2015