2016-05-12 1 views
1

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

$ 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 

Но в конце концов, я всегда получаю от этого ремесленных модуля вызовов:

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

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

ответ

0

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

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

binary вар содержит путь для вызова 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); 
} 

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

+1

Вы правы, в спешке я забыл отметить его. Готово – Eagle

Смежные вопросы