PHP shell_exec() приводит к текстовому файлу?

#php #file #text-files #shell-exec

#php #файл #текстовые файлы #shell-exec

Вопрос:

Я хотел бы попытаться увидеть результат двух вызовов shell_exec() в txt-файле.Итак, я попробовал это:

 $data_server = shell_exec('./c5.0demo -f $username -r');
$errorFile = "error.txt";
$fileopen = fopen($errorfile, 'w') or die ("can't open file");
fwrite($fileopen, $data_server);

$data_server2 = shell_exec('./predictBatch -f $username -r > $username.result');
$fileopen = fopen($errorfile, 'w') or die ("can't open file");
fwrite($fileopen, $data_server2);
  

Исполняемые файлы «c5.0demo» и «predictBatch» находятся в том же каталоге, что и скрипт этого PHP.
Переменная $username извлекается методом POST: $user = $_POST[‘имя пользователя’];
Будучи массивом, я помещаю значение в другую переменную следующим образом:

  foreach($user as $val)
 $username .= $val;
  

Я думаю, что это правильно, но у меня нет «error.txt » внутри моего справочника.
Почему я не прав?
Спасибо за вашу поддержку!

Комментарии:

1. Мне интересно, являются ли ваши аргументы, использующие расширенные переменные, хотя бы частью проблемы: './predictBatch -f $username -r > $username.result' должно быть "./predictBatch -f $username -r > $username.result" (примечание " вместо ' ). Это также относится к первой строке. Смотрите: php.net/manual/en /…

2. Tnx Джаред. Если я изменю ‘ в «, это не сработает. Это не создает error.txt досье. Я подумал: возможно, мне нужно указать каталог, в котором создается этот файл?

3. Указание абсолютного пути было бы хорошим шагом для устранения неполадок. Это может быть проблема с разрешениями, поскольку процесс, выполняющий файл, не имеет разрешения на запись для каталога.

4. Я понял! Это были $errorFile и $errorfile . Черт, чувствителен к регистру!!! : D

5. Хорошо, это определение небезопасного кодирования. Используйте escapeshellarg() для вашей переменной $username, или кто-то может скомпрометировать ваш сервер, передав ‘; <команда для выполнения от имени веб-сервера>’ для своего имени пользователя.

Ответ №1:

Попробуйте следующее:

 $data_server = shell_exec("./c5.0demo -f $username -r");
$data_server2 = shell_exec("./predictBatch -f $username -r > $username.result");

file_put_contents("/path/to/log/error.txt","{$data_server} : {$data_server2}n",FILE_APPEND);
  

Очевидно, что $username необходимо определить — кроме того, каков тип данных $username? Я спрашиваю, потому что $username.result выглядит очень неправильно.

Вы также должны очень серьезно принять к сведению предупреждение @mobius.