سؤال

كنت أتعلم رمز PHP هذا من برنامج تعليمي لتحميل الملفات

<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';

الآن أفهم كل وظيفة وكل شيء باستخدام وثائق PHP

إلا

get_magic_quotes_gpc()
  • ما هذا؟ ماذا يفعل؟
  • هل هو esesential؟ إذا كانت الإجابة بنعم ، هل هناك بديل لهذا؟
  • قال دليل PHP "تم إهمال هذه الميزة اعتبارًا من PHP 5.3.0. إن الاعتماد على هذه الميزة قد تم إحباطه للغاية.". تفصيل من فضلك؟
  • ليس هناك طريقة لتحميل الملفات إلى خادم (الويب) Hardisk وتوفير روابط لهم ..
هل كانت مفيدة؟

المحلول

get_magic_quotes_gpc () هي وظيفة تتحقق من التكوين (php.ini) ويعيد 0 إذا كان magic_quotes_gpc خارجًا (وإلا فإنه يعود 1).

عندما يتم تشغيل Magic_quotes ، يتم هروب كل شيء "(كمية واحدة) ،" (اقتباس مزدوج) ، (backslash) و nuls مع اندلاء عكسي تلقائيًا. وهذا لمنع جميع أنواع مشكلات أمان الحقن.

في حالتك ، يتحقق الرمز إذا كان الإعداد مطفئًا ويضيف مائلًا للهروب بشكل صحيح من المحتوى لمنع حقن SQL.

كما قلت - تم إهمال هذه الميزة وسيتم إزالتها بالتأكيد في المستقبل (في الواقع قاموا بإزالتها في PHP6).

البديل هو الهروب من البيانات في وقت التشغيل حسب الحاجة

نصائح أخرى

بعد قراءة رسالتك وجميع الإجابات والتعليقات ، أعتقد أن هذه الوظيفة قد تساعد ،

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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top