MAGIC_QUOTES_GPC()を理解するのに役立ちます
質問
ファイルをアップロードするために、チュートリアルからこの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にアップロードし、それらにリンクを提供する方法はありません。
解決
get_magic_quotes_gpc()は、magic_quotes_gpcがオフ(それ以外の場合は1を返す)の場合、構成(php.ini)をチェックし、0を返す関数です。
Magic_Quotesがオンになっている場合、すべて '(single quote)、 "(double quote)、(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;
}
所属していません StackOverflow