2016-05-12 36 views
1

我有1and1託管服務器,我正在使用Laravel。當我想執行的工匠命令安排的任務,我得到這個錯誤:Laravel Artisan 1and1服務器PHP版本錯誤

$ 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的呼叫使用PHP 4.4.9版本,而不是Laravel需要的5.5版本。

$ 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和改變了工匠文件,調用這個第一行:

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

但最後我總是從工匠模塊調用得到這樣的:

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

所以這個問題一定來自誰生成的那些「Running scheduled command」 lines。

回答

0

經過研究,問題出在Symfony內部腳本「定位」php路徑來調用它的方式。特別是那些:

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

binary VAR持有調用PHP的路徑。在我的情況下,我強迫它使用php5.5的1and1路徑,就這些。

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