出于安全原因,Codeigniter escapeshellarg()已被禁用

时间:2012-12-30 22:30:34

标签: php codeigniter

有没有办法重写codeigniter的Upload.php库,因为我一直面对

  出于安全原因,

escapeshellarg()已被禁用

我已经在this thread尝试了解决方案,将@放在escapeshellarg前面,但仍然无法上传我的图片,那就是忽略警告。

我曾尝试联系我的托管服务的管理员,但出于安全原因,他们无法启用它。

我可以做到这一点,所以我可以上传图片吗?

4 个答案:

答案 0 :(得分:4)

你可以创建自己的escapeshellarg,它是一个非常简单的函数,它只会转义给定字符串中的任何单引号,然后在它周围添加单引号。

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

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

如果您的提供商已禁用Upload.php要求的其他功能,那么您可能会运气不好。

您可以通过创建一个名为.php的简单phpinfo()文件来查找禁用的功能。 (在生成的输出中搜索disable_functions

答案 1 :(得分:3)

尝试在system / libraries / Upload.php文件中用@escapeshellarg替换escapeshellarg。

答案 2 :(得分:0)

这与CI没有任何关系。该功能已在php.ini文件中禁用。禁用各种不安全的功能是很常见的(从服务器管理员的角度来看)。

如果您使用的是共享主机,那么您可能无法做到这一点。尝试询问您的提供商。

如果您可以修改php.ini然后将其打开,请找到disable_functions字段,然后从列表中删除escapeshellarg。然后重启服务器。这应该启用该功能。

如果您仍有问题,请询问您的提供商是否可以上传内容。我的意思是,如果您的提供商故意删除了所有上传功能,那么您将浪费时间寻找方法。

答案 3 :(得分:0)

转到system / libraries / Upload.php

更换

  

使用@escapeshellarg

进行转义
if (DIRECTORY_SEPARATOR !== '\\') 
{ $cmd = 'file --brief --mime ' . @escapeshellarg ($file['tmp_name']) . ' 2>&1'; 
相关问题