Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Отсутствие разметки 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');

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Хотя этот вопрос очень старый, я хотел бы расширить @ Боб Фэнджер немного.

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

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

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

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

    <?php
    var_dump($argv);
    ?>
    

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

    [email protected]:$ /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(),...), поэтому вам необходимо предоставить соответствующее разрешение этому пользователю.