帮助了解魔术_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手册说:“此功能已被删除为5.3.0。依靠此功能是高度灰心的。”请详细说明吗?
- 没有一种方法可以将文件上传到(Web)服务器硬孔并提供指向它们的链接。
解决方案
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;
}
不隶属于 StackOverflow