c — PHP exec не получает стандартный вывод после долгого выполнения

Я получил программу, написанную на C и скомпилированную с помощью gcc, которую я тестировал на утечки памяти и т. Д. Как в Linux с Valgrind, так и в Windows с drmemory, и с соответствующими проблемными аргументами argv. Я не нашел абсолютно никаких проблем с этим, и я получаю результат, который я ожидаю при этом. Единственными включенными библиотеками, которые почти не используются, являются stdio.h, stdlib.h, string.h, sys / time.h. Только выходные данные — это printf и fopen для определенного файла, который, конечно, закрывается после использования, без возни с stdout или stderr или чем-то в этом роде.

Я вызываю эту программу из PHP с помощью exec, и программа, кажется, работает идеально почти все время, за исключением нескольких раз, когда исполняемый файл занимает более 30 секунд или что-то в этом роде. Проблема в том, что мне кажется, что я не получаю стандартный вывод, который мне нужно присвоить аргументу $ output с помощью вызова функции exec PHP, и при этом он не возвращает ничего, что должно быть последней строкой, выведенной из программы. Аргумент возвращаемого значения для функции exec устанавливается равным 0, что на самом деле является единственным возвращаемым значением, которое должна возвращать основная функция в программе C, выхода нет или что-либо еще. Я, конечно, установил ограничение времени скрипта PHP на 0, и он может работать часами просто отлично. Также следует отметить, что я запускаю этот скрипт PHP из cmd.exe в Windows 7 с правами администратора.

Я так много отлаживал это сейчас, и прежде чем я решил опубликовать здесь, я хотел посмотреть, дойдет ли это до части printf моей программы, где должен быть напечатан вывод, который я хочу, поэтому я заставил его написать точно такой же строка в файл сразу после printf. Угадай, что? Он записал ожидаемый результат в этот файл ……

Из этого я понимаю, что PHP exec каким-то образом не получает вывод stdout через определенное время. У кого-нибудь есть идеи, как это исправить?

Я предполагаю, что возможное исправление — заставить PHP-скрипт проверять созданный файл на выход, а не получать его через аргумент $ output, который должен получать его из stdout. Возможно, сделайте это, когда он ничего не получит от $ output, но это выглядит как очень плохой обходной путь.

Есть какие-то настройки, которые я пропустил?

Я использую PHP 5.6.6.

РЕДАКТИРОВАТЬ:
Я также уже удостоверился, чтобы установить это в начале сценария PHP, прежде чем я даже начал делать какие-либо из тестов и т. Д .:

error_reporting(E_ALL);
set_time_limit(0);

0

Решение

Вы пытались продлить максимальное время выполнения в конфигурации вашего сервера (или с помощью set_time_limit ())? По умолчанию 30, как я помню правильно. Может быть, это вызывает проблемы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]