我在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; 行。
答案 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);
}
现在有效!