7

当我想以任何形式上传任何内容时,我会在我的网站上看到警告:escapeshellarg() 出于安全原因已被禁用消息。我能做些什么来解决这个问题?

我的框架是 codeigniter 最终版本。

这是完整的警告:

A PHP Error was encountered

Severity: Warning

Message: escapeshellarg() has been disabled for security reasons

Filename: libraries/Upload.php
4

4 回答 4

8

操作员将静音该@函数可能引发的任何 PHP 错误。你永远不应该使用它!

解决方案:

  1. 从in文件中删除escapeshellarg字符串disable_functionsphp.ini

  2. 如果您无权访问该文件,请要求您的主机提供商删除从 php.ini 文件中删除该escapeshellarg字符串disable_functionsphp.ini

  3. 做你自己的escapeshellarg。该函数仅转义给定字符串中的任何单引号,然后在其周围添加单引号。

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

    并做这样的事情:

    // $cmd = 'file --brief --mime ' . escapeshellarg($file['tmp_name']) . ' 2>&1';
    $cmd = 'file --brief --mime ' . my_escapeshellarg($file['tmp_name']) . ' 2>&1';
    

    但最好的办法是扩展Upload.php库并覆盖_file_mime_type函数,而不是更改 CodeIgniter 的核心,这样如果你想更新 CodeIgniter 就不会丢失它。

    有用的链接:https ://www.codeigniter.com/user_guide/general/core_classes.html

于 2014-05-11T12:05:29.550 回答
5

尝试

$cmd = 'file --brief --mime ' . @escapeshellarg($file['tmp_name']) . ' 2>&1';

从system/libraries文件夹中打开Upload.php文件放在第1066行@前面,然后把escapeshellarg($file['tmp_name'])这个文件上传到application/libraries文件夹下会更好,否则没问题,你可以替换系统的Upload.php文件。

于 2012-08-22T05:00:23.090 回答
2
  1. 从 php.ini* 文件的 disable_functions 中删除 escapeshellarg 字符串

  2. 如果您无权访问 php.ini* 文件,请让您的托管服务提供商删除上面的字符串

  3. 更改允许运行 escapeshellarg 功能的托管服务提供商。

从这个网站:http ://www.2by2host.com/articles/php-errors-faq/disabled_escapeshellarg/

于 2012-05-01T06:13:03.847 回答
2

解决此问题的另一种简单方法是将您的应用程序从以下位置移动developmentproduction

在您的应用程序根目录中打开index.php并更改

define('ENVIRONMENT', 'development');

define('ENVIRONMENT', 'production');
于 2015-07-27T11:43:34.383 回答