Laravel Artisan Ошибка PHP-версии в сервере 1and1

У меня есть сервер, размещенный на 1 и 1, и я использую Laravel. Когда я хочу выполнить команду Artisan для планирования задач, я получаю эту ошибку:

$ php artisan schedule:run Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /htdocs/artisan on line 31 Parse error: syntax error, unexpected T_STRING in /htdocs/artisan on line 31 

После многих поисков ничего не решить мою проблему (сделайте псевдоним для PHP, вызовите $ php5.5 вместо $ php и т. Д.).

Основная проблема заключается в том, что вызов php использует версию 4.4.9 PHP, вместо 5.5, которой нужен Laravel.

 $ php -v PHP 4.4.9 (cgi-fcgi) (built: Mar 31 2016 16:41:29) Copyright (c) 1997-2008 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies $ php5.5 -v PHP 5.5.35 (cgi-fcgi) (built: May 3 2016 07:09:03) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies 

Я изменил вызов на php5.5 и изменил файл Artisan, вызвав его в первой строке:

 #!/usr/local/bin/php5.5 <?php 

Но в конце я всегда получаю это от звонков модулей artisan:

 Running scheduled command: '/usr/local/bin/php' 'artisan' moneySaved:send >> './logs/log.log' 2>&1 & 

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

Solutions Collecting From Web of "Laravel Artisan Ошибка PHP-версии в сервере 1and1"

После исследования проблема заключалась в том, что внутренние скрипты Symfony «локализуют» путь php для его вызова. В частности, это:

epoc/vendor/symfony/process/PhpExecutableFinder.php epoc/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Schedule.php

binary var содержит путь для вызова PHP. В моем случае я заставил его использовать путь 1 и 1 для php5.5, и все.

 public function command($command, array $parameters = []) { //$binary = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)); $binary = "/usr/local/bin/php5.5";​ if (defined('HHVM_VERSION')) { $binary .= ' --php'; }​ if (defined('ARTISAN_BINARY')) { $artisan = ProcessUtils::escapeArgument(ARTISAN_BINARY); } else { $artisan = 'artisan'; }​ return $this->exec("{$binary} {$artisan} {$command}", $parameters); } 

Теперь это работает!