Почему моя команда PHP system () перестала возвращать вывод моим сценариям ... я работал! - PullRequest
0 голосов
/ 17 ноября 2009

У меня есть PHP-скрипт, который вызывает файл .bat с помощью system (). Вывод записывается на экран, и я получаю некоторые значения из анализа этого вывода. Это работает на сервере Windows 2003 IIS. PHP v5.2.0

В частности, я использую этот скрипт для запуска экземпляра Amazon EC2 и назначения ему IP-адреса. До сих пор он работал отлично для меня, но недавно проблема началась.

Вот код

$resultBatTemp = system("cmd /C C:\Inetpub\ec2\my_batch_file_to_launch_instance.bat");
$resultBat = (string)$resultBatTemp;
$instanceId  = substr($resultBat, 9, 10);

...

После того, как у меня есть этот instace Id, я могу запустить другой пакетный файл, который вызывает ассоциированный IP-адрес с этим экземпляром. Казалось бы, экземпляр запускается, но я никогда не получаю вывод на экран.

По какой-то причине все это перестало работать, страница зависает и никогда не обновляется. Мне также нужно полностью выйти из Safari или Mozilla, в противном случае все страницы сайта не загружаются. Только когда я перезапущу браузер, я снова смогу просматривать веб-сайт. Я подключился к веб-серверу, на котором размещены эти сценарии, и проверил журнал ошибок PHP, но там ничего не отображается. Я открыл приглашение DOS и таким образом ввел код из файла bat, и он подключается к amazon и запускает экземпляр нормально. Я выделил этот фрагмент кода и удалил системную команду, а остальная часть сценария работает нормально, поэтому кажется, что задержка - с выводом результатов файла bat.

Недавно я приобрел новое доменное имя для сайта, поэтому этот скрипт запускается из этого домена. Может ли это вызвать проблемы?

спасибо

----------------------------------------------- -ОБНОВИТЬ-----------------------------------------------

Хорошо, надеюсь, это кому-нибудь поможет, я не выяснил, в чем дело, но создал новый файл PHP с простой системной командой, которая называется .bat, и несуществующим .bat, ожидающим ошибку назад, но ничего - просто обычное зависание целую вечность. Поэтому я перезапустил IIS, и это решило проблему. Не знаю, что случилось, но это помогло.

Ответы [ 2 ]

1 голос
/ 17 ноября 2009

Попробуйте использовать функцию passthru

Также убедитесь, что все ваши команды безопасны, используйте escapeshellarg () или escapeshellcmd (), чтобы гарантировать, что пользователи не смогут заставить систему выполнять произвольные команды.

1 голос
/ 17 ноября 2009

Возможно, сначала проверьте, что возвращает вызов system(). Согласно документации он вернет FALSE в случае сбоя. Кроме того, включение вашего my_batch_file_to_launch_instance.bat в вопрос может помочь в его решении.

...