Fopen + fwrite быстрее, чем shell_exec? - PullRequest
2 голосов
/ 19 апреля 2011

Я хочу записать текст в файл (например, записи журнала / данные / что угодно), где сервер находится в системе Unix

это быстрее использовать:

$handle = fopen("somefile"); fwrite($handle,"sometext");

или это:

shell_exec("echo 'sometext' > somefile");

есть ли другие недостатки использования метода shell_exec? скорость? безопасность? Палатки

Ответы [ 3 ]

4 голосов
/ 19 апреля 2011

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

Тем не менее, в процедурном коде, я думаю, я бы предпочел метод fopen() fwrite(), просто потому, что легче проверить на наличие ошибок и достоверность дескриптора вашего файла перед записью в него, а затем проверить возвращение fwrite() в убедитесь, что операция записи прошла успешно. Команда оболочки выдаст только один код ошибки, поэтому в случае ошибки будет сложнее выполнить отладку.

2 голосов
/ 19 апреля 2011

гораздо быстрее. Просто учтите, что shell_exec разветвляется, затем загружает двоичный файл оболочки, запускает его, затем оболочка интерпретирует команду, затем оболочка снова разветвляется для выполнения команды ...

1 голос
/ 19 апреля 2011

Функции f ... () определенно будут быстрее / безопаснее в долгосрочной перспективе. Даже если вы «только» выполняете эхо, сервер все равно должен сам себя разветвить, выполнить exec () оболочку, оболочка должна проанализировать свои аргументы, вызвать эхо, а затем ВСЕ ЕЩЕ открыть файл, чтобы записать ваши данные через его собственная последовательность fopen / fwrite / fclose.

Для простой отладки, ничего страшного. Для записи «частых» записей журнала на загруженном сайте это будет смерть вашего сервера.

Думайте об этом как о разнице между тем, чтобы <идти к холодильнику за напитком или выходить ---> за дверь и по всему миру, только чтобы снова оказаться у холодильника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...