Выполнение команды оболочки PHP дает случайный вывод только в режиме интенсивного использования - PullRequest
3 голосов
/ 28 марта 2012

Пожалуйста, помогите мне с этой проблемой, с которой я сталкиваюсь на производственном сервере.Я запустил приложение, которое сохраняет изображения в каталоге только после проверки того, что оно еще не существует.

Чтобы проверить, существует ли он уже, я использовал следующую команду find $filePath -name $fileInitial*

Я очень удивлен, увидев, что все прошло нормально при разработке и контроле качества, но в реальной среде из 50 случаев, в 5 случаях он возвращает пустое значение, даже если файл существует.

Я попытался заменить оператор backtick на exec, shell_exec, passthru и system.Я даже пытался заменить команду find на ls, но все равно не получил усиления.

Пожалуйста, предложите, что можно сделать?

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

В зависимости от вашего кода, я настоятельно рекомендую по возможности избегать exec / shell_exec.

Это создает очень большую угрозу безопасности для всей вашей системы, если не учитывать ее безопасность.

Не знаю, почему у вас возникают проблемы с действующей командой, которую вы пытаетесь обработать, однако мойРекомендуется использовать функции file_exists () или glob () в php вместо того, чтобы обращаться к файловой системе вручную.

1 голос
/ 29 марта 2012

Спасибо всем.Ваши предложения действительно сработали.Все хорошо работало с glob ().

Возможно, причина в том, что выполнение команды оболочки через php не ожидает достаточного времени для получения результата. Или это как-то связано с режимом CGI, в котором запускается php.

Пожалуйста, поделитесь своими мыслями.

0 голосов
/ 28 марта 2012

Вы установили: ignore_user_abort(true); и set_time_limit() на что-то разумное?Попробуйте также с popen ().Я всегда нахожу более легким интерфейс правильно.

...