Php “拉雷维尔”;由于安全原因,已禁用escapeshellarg();变通办法

Php “拉雷维尔”;由于安全原因,已禁用escapeshellarg();变通办法,php,laravel,symfony,Php,Laravel,Symfony,在共享主机上的Lavarvel(5.4.7)应用程序中,我在尝试通过Artisan(如Artisan::call('doSomething')运行cron作业时,遇到错误“escapeshellarg()因安全原因已被禁用” 启用escapeshellarg不是一个选项,因此我正在寻找最体面的工作,而不必更改供应商文件夹中的任何类。 我可以想出一些可能的解决方案,但还没有找到解决方法: 1) 将本机escapeshellarg替换为自定义escapeshellarg 2) 重写Symfony\C

在共享主机上的Lavarvel(5.4.7)应用程序中,我在尝试通过Artisan(如
Artisan::call('doSomething')运行cron作业时,遇到错误“escapeshellarg()因安全原因已被禁用”

启用escapeshellarg不是一个选项,因此我正在寻找最体面的工作,而不必更改供应商文件夹中的任何类。 我可以想出一些可能的解决方案,但还没有找到解决方法:

1) 将本机escapeshellarg替换为自定义escapeshellarg

2) 重写Symfony\Component\Process\ProcessUtils类

3) 重写ProcessUtils::escapeArgument函数(调用escapeshellarg),以便供应商文件夹中的其他类开始使用重写的类/函数(但无需更改或重写这些类本身)


有办法做到这一点吗?还是有其他方法可以解决此错误?

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

escapeshellarg($input)函数
to

$this->my_escapeshellarg($input)


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

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

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

escapeshellarg($input)函数
to

$this->my_escapeshellarg($input)


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

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

4) 获取像样的主机提供程序4)获取像样的主机提供程序我可以在哪里添加此功能?我可以在哪里添加此功能??