Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запись в конец файла из stderr и stdout

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ley4ik_Russia
Отправлено: 06 Марта, 2012 - 10:02:38
Post Id



Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Март 2011  


Помог: 1 раз(а)




Записываю в файлы результат выполнения команд, вся фишка в том что результат не дописывается в файл, а переписывает его. В итоге получается не лог файл, а свалка где ни чего не разобрать))
Спойлер (Отобразить)


-----
Ubuntu Server 12.04.2 LTS, Apache2, PHP5, MySQL5
 
 Top
EuGen Администратор
Отправлено: 06 Марта, 2012 - 10:22:24
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Вот здесь:
http://www.php.su/functions/?proc_open

- есть пример использования. Немного модифицировав его с тем, чтобы он писал данные с обоих потоков STDOUT и STDERR в файл, получилось:
PHP:
скопировать код в буфер обмена
  1. $descriptorspec = array(
  2.  0 => array("pipe", "r"),// stdin это канал, из которого потомок будет читать
  3.  1 => array("file", "/tmp/result-output.txt" ,"a"),// stdout это канал, в который потомок будет записывать
  4.  2 => array("file", "/tmp/error-output.txt", "a"), // stderr это файл для записи
  5. );
  6. $process = proc_open("/usr/local/bin/php", $descriptorspec, $pipes);
  7. if (is_resource($process))
  8. {
  9.    // $pipes выглядит теперь примерно так:
  10.    // 0 => записываемый дескриптор, соединённый с дочерним stdin
  11.    // 1 => записываемый дескриптор, соединённый с дочерним stdout
  12.    // Любой вывод ошибки будет присоединён к /tmp/error-output.txt
  13.  
  14.    fwrite($pipes[0], "<?PHP echo \"Hello World!\"; ?>");
  15.    fclose($pipes[0]);
  16.  
  17.  
  18.    // Важно, чтобы вы закрыли любые каналы до вызова
  19.    // proc_close, чтобы исключить тупиковую блокировку
  20.    $return_value = proc_close($process);
  21.  
  22.    echo "command returned $return_value\n";
  23. }

(сохранен оригинальный неймспейсинг, подсветка сбивается из-за присутствия в скрипте <?php ..?>). Скрипт был запущен несколько раз.
Результат - в /tmp создались 2 файла:
CODE (bash):
скопировать код в буфер обмена
  1. user@host:/path$ ls -la /tmp/*output.txt
  2. -rw-r--r-- 1 apache apache 71 2012-03-06 12:20 /tmp/error-output.txt
  3. -rw-r--r-- 1 apache apache 36 2012-03-06 12:23 /tmp/result-output.txt
  4. user@host:/path$ cat /tmp/error-output.txt
  5. sh: php: command not found
  6. sh: /usr/bin/php: No such file or directory
  7. user@host:/path$ cat /tmp/result-output.txt
  8. Hello World!Hello World!Hello World!

(в error-output.txt есть строки от предыдущих неудачных запусков, сохранены специально)

- как видно, данные дописываются в файл, а не переписывают его.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB