Предполагается, что система, возвращающая $ result == -1, основана на Unix (я не знаю, как будет вести себя Windows с тем же кодом)
Функция exec () PHP (5.2.9)не вызывает примитив C exec () (который возвращает -1, если он не может заменить / выполнить процесс, что здесь не так).Вместо этого он вызывает popen (), который создает канал, выполняет fork () и выполняет оболочку с вашей командой.Return_value, -1, не является прямым результатом примитива C, а скорее строится изнутри PHP, в зависимости от способа обработки вашей команды.Другими словами, команда "ls", возможно, была выполнена хорошо, в то время как, например, PHP не мог правильно закрыть канал.
Если посмотреть на код C, то в ext / standard / exec.c может бытьдве причины, по которым код возврата равен -1, вызван ошибкой;2-й происходит после вызова popen ()
fp = VCWD_POPEN(cmd_p, "r");
if (!fp) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd);
goto err;
}
// ...
err:
pclose_return = -1;
goto done;
Однако в этом случае вы не увидите результат, и в журнале отобразится ошибка.
Позже return_valueустанавливается через строку
pclose_return = php_stream_close(stream);
Просмотр _php_stream_free () (php_stream_close () - это макрос, замененный на _php_stream_free ()), наиболее вероятный кандидат, который может вернуть -1, -
ret = stream->ops->close(stream, preserve_handle ? 0 : 1 TSRMLS_CC);
Что, в свою очередь, косвенно вызывает примитив C pclose ().Согласно инструкции
Функция pclose () возвращает -1, если wait4 (2) возвращает ошибку или обнаружена какая-либо другая ошибка.
Кажется, чтово время закрытия канала обнаружена ошибка, которая не мешает заданию результирующих данных.Чтобы найти причину, нужно проверить настройки операционной системы и журналы, конфигурацию PHP и параметры компиляции.
Я бы порекомендовал
- , чтобы применить исправления для вашей ОС, ивозможно, обновите до более поздней версии (если применимо),
- , чтобы обновить PHP до 5.3.3 (последний на данный момент), поскольку код PHP exec () значительно изменился.
Имейте в виду, что в версии 5.3 были внесены изменения, связанные с модулем PHP suhosin, которые по умолчанию повышают безопасность при запуске файлов PHP.