пишем на php cli

147
28 ноября 2019, 22:00

Добрый вечер.

Часто приходится писать скрипты на php (одноразовые), перенос данных с одного сайта на другой, парсинг и т.д. Выполнения скрипта может занимать 30-100 мин. Естественно запуская скрипт через обычный браузер, обращаясь через http к скрипту, то сервер после некоторого времени (30, 60, 120) сек, возвращает 503, разрывает соединение. Разные настройки сервера не помогают.

Читал, что помогают в таких случаях, писать php скрипты под консоль. Так называемый php cli.

Подскажите пожалуйста, как мне это сделать? Предположим у меня есть хостинг со скриптами, мои дальнейшие действия? Не могу разобраться, где открыть эту консоль и т.д. Насколько я понял, php cli это просто такой режим запуска интерпретатора, с некоторыми параметрами.

Answer 1

Допустим, у вас есть компьютер с Windows. Вы можете открыть консоль и набрать там какие-нибудь команды. набрать dir и и получить список каталогов и файлов, скопировать файлы командой copy: copy c:\a.txt d:\b.txt

это консоль Windows. Если на вашем компьютере установлен php, вы можете открыть консоль, набрать что-нибудь вроде c:\lamp\php\bin\php -i и увидеть настройки php.

Теперь представьте себе ваш хостинг. Операционная система, но не Windows, а Linux. Скорее всего у него нет графической оболочки. Единственный ваш способ общения с ним - через командную строку.

PHP CLI расшифровывается именно так: Command Line Interface. Интерфейс командной строки.

Если у вас есть ssh-доступ к вашему сайту, вы сможете им воспользоваться чтобы запускать php-скрипты в консоли, творить прочую консольную магию.

Заходите через ssh на ваш хост (ssh example_user@example.org), попадаете в консоль и запускаете php ваш_скрипт.php

главные отличия между php-cli и "php через браузер":

1) php-cli выполняется с правами пользователя, который его запускает, php-через-браузер выполняется с правами "пользователя" веб-сервера.

2) Вы можете запустить что-нибудь в духе sudo php someFile.php и выполнить его с правами рута (самого главного пользователя в системе)

3) В php-cli по умолчанию нет ограничения по времени выполнения скрипта.

Если вы, допустим, подзабыли, как в принципе работает php - напомню. вашему серверу (apache, nginx) прилетает запрос - допустим на index.php - сервер посылает этот запрос демону php-fpm, который исполняет файл index.php, а результаты отправляет серверу, а сервер - вашему браузеру.

Это как если бы вам приходило письмо от друга с просьбой зайти в консоль, выполнить какой-то php-скрипт и прислать результат выполнения обратно.

Только гораздо быстрее.

В принципе, так интерпретаторы языков программирования и работают, на самом деле - через консоль. Поддержка веб-сервера полностью факультативна.

Детали и настройки вы можете найти в мануале PHP.

Answer 2

Найдите настройки SSH подключения вашего хостинга(как правило бесплатные хостинги не дают доступа, либо ограничивают его виртуальной консолью или php-cgi а не php-cli, если вам таки повезло и у вас есть доступ то подключитеcь через Putty(Windows), или просто набрав ssh и параметры подключения в терминале Linux)

Дальше просто вызываете нужный скрипт уже из этой консоли.

P.S. Рекомендую выносить скрипты подобные выше корня сайта, чтоб их не могли запустить из браузера а через консоль вы всё равно к ним достучитесь

READ ALSO
Почему компилятор выдаёт ошибку (T_VARIABLES) PHP

Почему компилятор выдаёт ошибку (T_VARIABLES) PHP

Что здесь синтаксически неправильно? Ругается на строчку где добавляется $_GET['label'];

111
Обновление части странички в ajax

Обновление части странички в ajax

Как организовать автоматическое обновление (через 5-10 сек) части странички

129