1and1服务器中的Laravel Artisan PHP版本错误

时间:2016-05-12 16:09:00

标签: php laravel

我在1and1上托管了一台服务器,我正在使用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的调用使用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并更改了Artisan文件,在第一行调用它:

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

但最后我总是从工匠模块电话中得到这个:

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

所以问题必须来自谁生成那些&#34;运行预定命令&#34; 行。

1 个答案:

答案 0 :(得分:0)

经过研究,问题在于Symfony内部脚本&#34;定位&#34;调用它的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);
}

现在有效!