2016-05-12 86 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