Intereting Posts
Возвращает статическую модель указанного класса AR в yii 2.0 SQLSTATE : базовая таблица или представление не найдены: 1146 Таблица X не существует Laravel 4: развертывание пользовательской команды artisan в пакете как отправлять электронные письма по нескольким адресам с помощью phpmailer Как динамически вызывать метод класса в PHP? Использование JSON для выбора опции Dropbox Как конвертировать дату из одного формата в другой Как разрешить путь в классе non-контроллера в symfony2 Обратный порядок вывода запросов sql array: хранить несколько значений за ключ Редактируемый GRID (ExtJS) с использованием PHP + MySQL .htaccess config с символическими ссылками и индексными файлами, которые не работают должным образом Paypal: невозможно выполнить повторную авторизацию авторизированной ошибки платежа: произошла внутренняя ошибка службы Как я могу заставить этот скрипт работать в WordPress? Загрузите видео на YouTube

Разница между выполнением php из командной строки и со стороны Http

В чем разница между выполнением php из командной строки и HTTP? Используют ли они один и тот же исполняемый файл, например (php.exe или php-cgi.exe (Apache или IIS))? Отличаются ли результаты, когда они выполняются из командной строки или HTTP?

Нет html-разметки в ошибках
Это параметр php.ini ( html_errors ), но по умолчанию он отключен в версии cli.

Вход в stderr
Обычно ошибки регистрируются в webservers error.log, но в версии cli ошибки записываются в stderr.
Это также доступно как настройка php.ini ( error_log )

php.ini
Файл php.ini, который используется для версии cli, может быть другим файлом . Это может привести к некоторым неприятным ошибкам (завиток внезапно недоступен и т. Д.).

Различные исполняемые файлы
Можно установить несколько версий php (php5 вместе с php4)
Используйте which php чтобы определить, какую версию вы используете.

Все отображается как текст
var_dump () читается без <pre>
Нет разницы между header('Hello'); и echo('Hello');

Основное различие заключается в передаче аргументов: запуск из CLI, у вас нет $ _GET, $ _POST, $ _SESSION и т. Д .; поэтому аргументы должны быть переданы в качестве параметров командной строки и доступны с использованием if $ _SERVER ['argc'] и $ _SERVER ['argv'] Остерегайтесь каталога, в котором работает ваш код, и пути включения; и убедитесь, что знаете, что вы загрузили php.ini. При выводе HTML разметка не отображается как разметка, но отображается как <h1> и т. Д. … особенно для
(PHP_EOL чрезвычайно полезна), и несколько пробелов или вкладок на самом деле отображаются в виде нескольких пробелов или вкладок в одном пространстве. Забудьте заголовки () и другие функции, связанные с http

Вызывается ли PHP с помощью модуля веб-сервера или CLI, используется одна и та же база данных (но иногда может быть настроена на использование разных ini, которые могут повлиять на скрипт). Это среда также будет отличаться, поэтому переменные среды не будут точными.

PHP также знает, что он был вызван по-разному и будет адаптировать его выход к этому (т. phpinfo(); вывод будет отформатирован по-разному при вызове через CLI).

Когда вы выполняете php из командной строки, ваш сервер apache или iis не играют никакой роли. Вы просто используете папку php4 или php5 для выполнения кода. Там могут быть различия с исполнением в зависимости от различий в доступных библиотеках и настроек php.ini в двух папках. При запуске из apache php.ini в вашем apache / bin используется. Когда из командной строки используется php.ini из вашей папки php5 или php4.

По большей части все одинаково. Большие различия заключаются в том, что супер-глобалы не могут быть заселены. Лучшее место для их просмотра можно найти на php.net http://php.net/manual/en/features.commandline.php

Помимо сказанного, скорее всего, будут различия в привилегиях относительно того, какие части файловой системы доступны: PHP через веб-сервер запускается как пользователь веб-сервера, PHP из командной строки запускается как вы.

Хотя этот вопрос очень старый, я бы хотел расширить @ Bob Fanger.

Запуск php-файлов из командной строки довольно тривиален, вам нужно только иметь в виду, что есть некоторые отличия от запуска файла на веб-сервере или на интерфейсе командной строки серверов:

  • Нет доступных файлов cookie

  • Нет $_GET , $_POST , $_SESSION доступно Но вы можете использовать $argv для получения параметров, переданных в качестве аргумента в команду. Первое значение – это всегда имя файла.

    Например, взяли этот файл:

     <?php var_dump($argv); ?> 

    называется так:

     user@ubuntu:$ /usr/bin/php /home/user/file.php foo bar 

    даст вам этот результат:

     array(4) { [0]=> string(8) "file.php" [1]=> string(3) "foo" [2]=> string(3) "bar" } 
  • Необходимы полные пути к файлу с ваших корневых серверов. Вам необходимо будет предоставить полные пути к вашим файлам (например, для include() , require() , file_get_contents() , …), даже если они могут находиться в одной папке.

  • разные настройки пользователя / разрешения, файлы не выполняются пользователем www-data , а пользователем, с которым вы вошли в систему. Это влияет на все вызовы функций вашего файла, которые влияют на файловую систему машин (например, mkdir() , include() , …), поэтому вам необходимо предоставить соответствующее разрешение этому пользователю.