有没有办法重写codeigniter的Upload.php库,因为我一直面临
出于安全原因,escapeshellarg() 已被禁用
我已经在这个线程中尝试了将@放在escapeshellarg前面的解决方案,但仍然无法上传我的图像,那就是忽略警告。
我试图联系我的托管服务的管理员,但出于安全原因,他们无法启用它。
我能做些什么来欺骗这个,所以我可以上传图片吗?
有没有办法重写codeigniter的Upload.php库,因为我一直面临
出于安全原因,escapeshellarg() 已被禁用
我已经在这个线程中尝试了将@放在escapeshellarg前面的解决方案,但仍然无法上传我的图像,那就是忽略警告。
我试图联系我的托管服务的管理员,但出于安全原因,他们无法启用它。
我能做些什么来欺骗这个,所以我可以上传图片吗?
您可以自己制作escapeshellarg
,这是一个非常简单的函数,它只转义给定字符串中的任何单引号,然后在其周围添加单引号。
function my_escapeshellarg($input)
{
$input = str_replace('\'', '\\\'', $input);
return '\''.$input.'\'';
}
但是,如果您的提供商禁用了其他Upload.php
需要的功能,那么您最终可能会不走运。
.php
您可以通过创建一个包含调用的简单文件来查找哪些功能被禁用phpinfo()
。(disable_functions
在生成的输出中搜索)
尝试在 system/libraries/Upload.php 文件中用@escapeshellarg 替换escapeshellarg。
这与 CI 没有任何关系。该功能已在php.ini
文件中禁用。禁用各种不安全的功能是很常见的(从服务器管理员的角度来看)。
如果您使用的是共享主机,那么您可能无能为力。尝试询问您的提供商。
如果您可以编辑php.ini
然后打开它,找到该disable_functions
字段,然后escapeshellarg
从列表中删除。然后重新启动服务器。那应该启用该功能。
如果您仍然有问题,请询问您的提供商是否可以上传内容。我的意思是,如果您的提供商故意删除了所有上传功能,那么您将浪费时间寻找一种方法来做到这一点。
转到系统/库/Upload.php
更换
带有@escapeshellarg 的escapeshellarg
if (DIRECTORY_SEPARATOR !== '\\')
{ $cmd = 'file --brief --mime ' . @escapeshellarg ($file['tmp_name']) . ' 2>&1';