У меня есть сервер, размещенный на 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 &
Поэтому проблема должна исходить от того, кто генерирует строки «Запуск запланированной команды» .
После исследования проблема заключалась в том, что внутренние скрипты 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); }
Теперь это работает!