Ayuda a entender magic_quotes_gpc ()
Pregunta
i estaba aprendiendo el código PHP de un tutorial para subir archivos
<form method="post" enctype="multipart/form-data">
<input name="userfile" type="file" id="userfile">
</form>
<?php
if (isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) {
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if (!get_magic_quotes_gpc()) {
$fileName = addslashes($fileName);
}
include 'library/config.php';
include 'library/opendb.php';
$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
mysql_query($query) or die('Error, query failed');
include 'library/closedb.php';
Ahora entiendo todas las funciones y todo mediante el uso de documentación de PHP
excepto
get_magic_quotes_gpc()
- ¿Qué es? Lo que hace?
- ¿Es eseential? En caso afirmativo, ¿Hay un reemplazo para esto?
- El manual de PHP dijo "Esta característica ya no se utiliza a partir de PHP 5.3.0. Basándose en esta función no es nada recomendable.". Elaborar favor?
- ¿No hay una manera de subir archivos al servidor (web) discos duros y proporcionar enlaces a los mismos ..
Solución
get_magic_quotes_gpc () es una función que comprueba la configuración (php.ini) y devuelve 0 si magic_quotes_gpc está apagado (de lo contrario devuelve 1).
Cuando magic_quotes están encendidas, todo '(comilla simple), "(comillas dobles), \ (barra invertida) y NULs se escaparon con una barra invertida de forma automática. Esto es para evitar todo tipo de problemas de seguridad de la inyección.
En su caso el código comprueba si el ajuste está apagado y añade barras de escapar correctamente el contenido para evitar la inyección de SQL.
Al igual que usted ha dicho -. Esta función es obsoleto y sin duda va a suprimir en el futuro (de hecho lo sacaron en PHP6)
La alternativa es para escapar de los datos en tiempo de ejecución, según sea necesario
Otros consejos
después de leer su correo y todas las respuestas y comentarios Creo que esta función puede ayudar,
function mysql_prep( $value ) {
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0
if( $new_enough_php ) { // PHP v4.3.0 or higher
// undo any magic quote effects so mysql_real_escape_string can do the work
if( $magic_quotes_active ) { $value = stripslashes( $value ); }
$value = mysql_real_escape_string( $value );
} else { // before PHP v4.3.0
// if magic quotes aren't already on then add slashes manually
if( !$magic_quotes_active ) { $value = addslashes( $value ); }
// if magic quotes are active, then the slashes already exist
}
return $value;
}