Laravel“escapeshellarg()因安全原因而被禁用”解决方法

时间:2017-05-30 14:28:46

标签: php laravel symfony

在我的共享主机上的Lavarvel(5.4.7)应用程序中,当尝试通过Artisan运行cron作业时出现“escapeshellarg()因安全原因而被禁用”servletOutPutStream

启用escapeshellarg不是一个选项,所以我正在寻找最体面的工作,而不必更改vendor文件夹中的任何类。 我能想到的一些可能的解决方案但是还没弄明白该怎么做:

1)用自定义的替换原生的escapeshellarg。

2)覆盖Symfony \ Component \ Process \ ProcessUtils类

3)重写ProcessUtils :: escapeArgument函数(调用escapeshellarg),以便vendor文件夹中的其他类开始使用覆盖的类/函数(但不必自己更改或覆盖这些类)。

有办法做到这一点吗?或者有其他方法来解决错误吗?

1 个答案:

答案 0 :(得分:0)

只需创建自己的escapeshellarg函数并替换

escapeshellarg($input) function

$this->my_escapeshellarg($input)


function my_escapeshellarg($input)
    {
      $input = str_replace('\'', '\\\'', $input);

      return '\''.$input.'\'';
    }