2012-04-30 39 views
7

當我想以任何形式上傳任何內容時,我看到了警告:出於安全原因,我的網站上出現了安全原因消息時,escapeshellarg()已被禁用。我能做些什麼來解決這個問題?出於安全原因,escapeshellarg()已被禁用

我的框架是codeigniter最終版本。

以下是完整的警告:

A PHP Error was encountered 

Severity: Warning 

Message: escapeshellarg() has been disabled for security reasons 

Filename: libraries/Upload.php 

回答

6

嘗試

$cmd = 'file --brief --mime ' . @escapeshellarg($file['tmp_name']) . ' 2>&1'; 
從系統/庫文件夾

打開upload.php的文件,並把@escapeshellarg($file['tmp_name'])前在行1066 和第二件事上傳此應用程序/庫文件夾下的文件會更好,其他明智的沒有問題,您可以替換系統的Upload.php文件。

+0

謝謝,今天得到這個錯誤,你的答案就像一個魅力! –

+2

這只是忽略了警告 – Waqleh

6

「@」將會消除該函數可能引發的任何php錯誤。 從來沒有使用它

解決方案:

1在php.ini文件

2-取下disable_functions選項的escapeshellarg串詢問你的主機提供商以去除在PHP disable_functions選項刪除escapeshellarg串.ini文件如果你沒有訪問php.ini文件

3-make your own 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 ' . $this->my_escapeshellarg($file['tmp_name']) . ' 2>&1'; 

但是,什麼是最好的是擴展了上傳。PHP庫,並重新賴特_file_mime_type功能,而不是在,這樣你就不會失去它,如果你想更新

2

另一種簡單的方式來解決這個問題的核心是改變只要將您的應用程序從developmentproduction

打開index.php在你的應用程序的根,改變

define('ENVIRONMENT', 'development'); 

define('ENVIRONMENT', 'production'); 
相關問題