9

ファイルをアップロードするチュートリアルからこの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 マニュアルには、「この機能は PHP 5.3.0 で非推奨になりました。この機能に依存することはお勧めできません。」とあります。詳しく教えてください。
  • ファイルを (Web) サーバー harDisk にアップロードして、それらへのリンクを提供する方法はありませんか..
4

2 に答える 2

28

get_magic_quotes_gpc()は、構成(php.ini)をチェックし、magic_quotes_gpcがオフの場合は0を返す(それ以外の場合は1を返す)関数です。

magic_quotesがオンの場合、すべての'(一重引用符)、 "(二重引用符)、\(バックスラッシュ)、およびNULはバックスラッシュで自動的にエスケープされます。これは、あらゆる種類のインジェクションセキュリティの問題を防ぐためです。

あなたの場合、コードは設定がオフになっているかどうかをチェックし、スラッシュを追加してコンテンツを適切にエスケープし、SQLインジェクションを防ぎます。

あなたが言ったように-この機能は非推奨であり、将来確実に削除されるでしょう(実際、彼らはPHP6でそれを削除しました)。

別の方法は、必要に応じて実行時にデータをエスケープすることです

于 2010-08-18T01:09:36.097 に答える
0

あなたの投稿とすべての回答とコメントを読んだ後、この機能が役立つと思います。

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;
}
于 2016-10-16T07:54:14.147 に答える