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 ..
¿Fue útil?

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top