#php #shell #cron #command-line-interface
#php #оболочка #cron #интерфейс командной строки
Вопрос:
Я размещен с 1and1.com , и я настроил свои файлы для анализа с помощью php5 .htaccess
.
Но это работает только в apache, а не в командной строке, которая по умолчанию использует php4 по умолчанию для сервера.
Итак, в настоящее время я не могу настроить задания cron для запуска моего кода как php5. Есть идеи?
Ответ №1:
В соответствии с https://community.1and1.com/using-php-composer-at-1and1 /, создайте файл .profile в вашем корневом проекте и добавьте строку :
alias php='/usr/bin/php5.5-cli'
Это работает для меня.
Выйдите из системы и снова войдите в SSH и выполните :
php -v
Результат :
PHP 5.5.32 (cli) (построен: 15 февраля 2016 16:13:44)
Ответ №2:
Если оба установлены, все, что вам нужно сделать, это запустить скрипт, используя соответствующий двоичный файл PHP.
Так, например:
// Runs using the PHP binary located at /usr/bin/php
* * * * * root /usr/bin/php -n "/path/to/script.php"
или
// Runs using the PHP binary located at /var/php5
* * * * * root /var/php5 -n "/path/to/script.php"
Все, что вам нужно знать, это полный путь к файловой системе двоичных файлов PHP CLI и вызвать соответствующий для запуска вашего кода.
Ответ №3:
Если вы можете выполнять PHP-скрипты непосредственно в оболочке, например:
$ script.php
вы можете указать двоичный файл, который будет выполнять скрипт в его первой строке:
#!/usr/bin/php
<?php
Эта строка называется shebang. Строка может отличаться в вашей системе, вам нужно знать полный путь к файловой системе двоичного файла PHP CLI, который вы хотите использовать для этого скрипта.
Если вы запустите этот файл в оболочке, будет использоваться указанный двоичный файл. То же самое для cron.
Если вы запустите этот файл через свой веб-сервер, PHP автоматически удалит эту строку.
Смотрите также: Особенности: использование PHP из командной строки
Ответ №4:
должно быть два каталога PHP, и один из них должен быть каталогом по умолчанию. попробуйте узнать путь к php5 из корня вашего сервера и используйте полный путь при выполнении задания cron.
Комментарии:
1.
whereis php
может помочь с поиском ваших php-местоположений2.
which php
илиwhich php5.5-cli
как командная строка 1and1 не имеетwhereis
Ответ №5:
Это еще один подход к принудительному использованию PHP из командной строки на 1and1.
Войдите в систему с помощью ssh на своем сервере и создайте новый файл, вызываемый .profile
там, вы напишете следующую строку alias php='/usr/local/bin/php5'
, снова войдите в систему с помощью ssh и проверьте версию php php -v
, если увидите, что версия теперь 5.
Ответ №6:
Я, наконец, получил эту работу. Проблема была в несколько раз.
Во-первых, используемый PHP был в /etc/bin вместо версии MAMP. Я смог изменить это и вместо этого использовать версию MAMP.
Во-вторых, чтобы использовать php через CLI, вы должны убедиться, что используете ПОЛНЫЙ путь к php, а не только сам php. Т.е. Используйте /MAMP/bin/php/php5.3.x/php в вашем вызове exec(). Теперь это работает для меня.
Вы можете ознакомиться с моей сутью здесь …https: //gist.github.com/1861487
Комментарии:
1. Вам не нужно использовать полный путь для запуска php в CLI (я уверен в этом, запустив php из терминала на моем Mac с помощью MAMP, XAMPP и стандартной установки OSX.) Причина, по которой вы это сделали, была либо (в зависимости от полученной ошибки): а) У вас нет каталога bin в вашей переменной PATH env (что приводит меня каждый раз), либо б) у вас установлено несколько версий php, и первая в пути была не той, которую вы хотели. Для первого вы можете подтвердить, выполнив следующее перед вызовом php:
PATH=$PATH:/MAMP/bin
2. Это вообще не отвечает на вопрос. OP спрашивал о среде 1and1, которая не имеет ничего общего с MAMP.
Ответ №7:
По крайней мере, в Linux вы также можете указать желаемую версию PHP в первой строке вашего скрипта следующим образом:
#!/usr/bin/php5.6
<?php
echo 'This is PHP version ' . phpversion() . "n";
?>
Сделайте ваш скрипт исполняемым и укажите задание cron следующим образом:
# Just runs the script, which itself cares for the right php version
* * * * * root "/path/to/script.php"