代码之家  ›  专栏  ›  技术社区  ›  Moon

帮助理解魔术\u引号\u gpc()

  •  8
  • Moon  · 技术社区  · 14 年前

    我从一个上传文件的教程中学习了这个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()
    
    • 它是什么?它是干什么的?
    • PHP手册中说:“从PHP5.3.0开始,这个特性就被弃用了。不鼓励依赖此功能。“。请详细说明?
    • 有没有办法上传文件到(网络)服务器硬盘,并提供链接到他们。。
    2 回复  |  直到 14 年前
        1
  •  23
  •   DmitryK    14 年前

    当启用magic\u quotes时,所有'(单引号)、“(双引号)、\(反斜杠)和NUL将自动用反斜杠转义。这是为了防止各种注入安全问题。

    在您的例子中,代码检查设置是否为off,并添加斜杠以正确转义内容以防止SQL注入。

    就像你说的-这个特性已经被弃用了,将来肯定会被删除(事实上他们在PHP6中删除了它)。

    另一种方法是根据需要在运行时转义数据

        2
  •  0
  •   Michael Baxter    8 年前

    在阅读了你的帖子和所有的答案和评论后,我认为这个功能可能会有所帮助,

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