2012-04-30 3 views
7

Quando voglio caricare qualsiasi cosa in qualsiasi forma, vedo l'avviso : escapeshellarg() è stato disabilitato per ragioni di sicurezza messaggio sul mio sito. Cosa posso fare per risolvere questo problema?escapeshellarg() è stato disabilitato per motivi di sicurezza

La mia struttura è la versione finale del codeigniter.

Qui è la piena avvertenza:

A PHP Error was encountered 

Severity: Warning 

Message: escapeshellarg() has been disabled for security reasons 

Filename: libraries/Upload.php 

risposta

6

Prova

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

Apri file upload.php dal sistema di cartella/librerie e mettere @ davanti escapeshellarg($file['tmp_name']) alla linea 1066 e seconda cosa caricare questo file sotto cartella applicazioni/librerie che sarà migliore, altro saggia nessun problema, è possibile sostituire il file Upload.php del sistema.

+0

Grazie, ho ricevuto questo errore oggi e la risposta ha funzionato come un incantesimo! –

+2

è sufficiente ignorare l'avviso – Waqleh

6

il simbolo "@" silenzia gli eventuali errori php che la funzione potrebbe generare. mai usarlo

soluzioni:

1- Rimuovere la stringa escapeshellarg dalle disable_functions nel file php.ini

2- Chiedi al tuo fornitore di host per rimuovere rimuovere la stringa escapeshellarg dalle disable_functions in php file .ini se non si ha accesso al file php.ini

3-creare il proprio escapeshellarg. La funzione scansiona solo le virgolette singole nella stringa data e quindi aggiunge singole virgolette attorno ad essa.

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

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

e fare qualcosa del genere:

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

Ma ciò che è meglio è per estende il Upload.php biblioteca e ri-Wright il _file_mime_type funzione invece di cambiare il nucleo di CodeIgniter in modo che non si perde se si volesse aggiornare CodeIgniter

2

Un altro modo semplice per risolvere questo problema è basta spostare la vostra applicazione development-production:

aperto index.php nella vostra radice dell'applicazione e modificare

define('ENVIRONMENT', 'development'); 

a

define('ENVIRONMENT', 'production');