当我想以任何形式上传任何内容时,我在我的网站上看到警告:出于安全原因已禁用了escapeshellarg()消息。我该怎么做才能解决这个问题?
我的框架是codeigniter最终版本。
以下是完整警告:
A PHP Error was encountered
Severity: Warning
Message: escapeshellarg() has been disabled for security reasons
Filename: libraries/Upload.php
答案 0 :(得分:7)
@
运算符将使函数可能引发的任何PHP错误无声。 你永远不应该使用它!
解决方案:
从escapeshellarg
文件中的disable_functions
php.ini
字符串
要求您的主机提供商删除如果您无法访问escapeshellarg
文件,请从php.ini文件中的disable_functions
删除php.ini
字符串
制作您自己的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,就不会丢失它。 / p>
有用的链接:https://www.codeigniter.com/user_guide/general/core_classes.html
答案 1 :(得分:5)
尝试
$cmd = 'file --brief --mime ' . @escapeshellarg($file['tmp_name']) . ' 2>&1';
从system / libraries文件夹中打开Upload.php文件,并将@
放在escapeshellarg($file['tmp_name'])
前面第1066行
第二件事是在application / libraries文件夹下上传这个文件会更好,其他没问题,你可以替换系统的Upload.php文件。
答案 2 :(得分:2)
从php.ini *文件中的disable_functions中删除escapeshellarg字符串
如果您无法访问php.ini *文件,请让您的托管服务提供商删除上面的字符串
更改允许运行escapeshellarg函数的托管服务提供商。
来自此网站:http://www.2by2host.com/articles/php-errors-faq/disabled_escapeshellarg/
答案 3 :(得分:2)
解决此问题的另一种简单方法是将您的应用从development
移至production
:
在您的应用程序根目录中打开index.php
并更改
define('ENVIRONMENT', 'development');
到
define('ENVIRONMENT', 'production');