我想关掉PHP的魔术引号.我无法访问php.ini.
当我尝试添加php_flag magic_quotes_gpc off
到我的.htaccess文件时,我收到500内部服务器错误.这是我的.htaccess文件的样子:
AddType x-mapp-php5 .php php_flag magic_quotes_gpc off
然后我尝试使用ini_set('magic_quotes_gpc', 'O')
,但这没有效果.
如何关闭魔术报价?
根据手册,您通常可以在共享主机上安装自定义php.ini,其中不使用mod_php,因此php_value
指令会导致错误.对于suexec/FastCGI设置,php.ini
在任何情况下都有一个per-webspace是很常见的.
-
我不认为O(大写字母o)是设置ini标志的有效值.您需要使用true/false,1/0或"on"/"off"值.
ini_set( 'magic_quotes_gpc', 0 ); // doesn't work
编辑
在检查了ini设置列表后,我看到magic_quotes_gpc是一个PHP_INI_PERDIR
设置(在4.2.3之后),这意味着你不能用它来改变它ini_set()
(只有PHP_INI_ALL
设置可以改变ini_set()
)
这意味着您必须使用.htaccess文件来执行此操作 - 或 - 实现脚本以反转魔术引号的效果.像这样的东西
if ( in_array( strtolower( ini_get( 'magic_quotes_gpc' ) ), array( '1', 'on' ) ) ) { $_POST = array_map( 'stripslashes', $_POST ); $_GET = array_map( 'stripslashes', $_GET ); $_COOKIE = array_map( 'stripslashes', $_COOKIE ); }
虽然我不能说为什么php_flag会给你500 Internal Server Error
s,但我会指出PHP手册有一个例子,用于检测魔术引号是否打开并在运行时从超级全局中删除它.与其他发布的不同,这个是递归的,将正确地从数组中删除引号:
更新:我今天注意到PHP手册中有以下代码的新版本,它使用了对超级全局变量的引用.
旧版:
新版本:
$v) { unset($process[$key][$k]); if (is_array($v)) { $process[$key][stripslashes($k)] = $v; $process[] = &$process[$key][stripslashes($k)]; } else { $process[$key][stripslashes($k)] = stripslashes($v); } } } unset($process); } ?>
这将解决在创建本地php.ini文件时获取"未找到"类'PDO'的问题.
如果你不能使用htaccess文件关闭魔术引号(由于Pete Bailey已经给出的原因),只需:
创建一个文本文件
将其重命名为'php.ini'
添加行
magic_quotes_gpc =关闭
magic_quotes_runtime =关闭
magic_quotes_sybase =关闭
扩展名= pdo.so
extension = pdo_mysql.so
将其保存到执行脚本的目录中.
更新:如果您只想拥有新php.ini文件的一个副本,请将此行添加到根.htaccess文件中:
SetEnv PHPRC /path/to/site/root/public_html/php.ini
显然你需要将ini文件移动到它的位置.
希望拯救某人2个小时,它刚刚带走了我!
.htaccess文件中的php_flag和php_value在技术上是正确的 - 但是对于仅作为Apache模块安装的PHP.在共享主机上,您几乎永远不会找到这样的设置; 由于与安全性相关的原因(保持服务器邻居不在文件中)以及phpsuexec以"你"而不是apache用户运行脚本的方式,PHP作为CGI运行.
因此Apache正确地给你一个服务器错误:除非加载了PHP模块,否则它不知道php_flag的含义.CGI二进制文件对Apache来说是一个外部程序,你不能在Apache中配置它.
现在好消息:你可以设置每个目录配置,放置一个名为' php.ini ' 的文件,并使用与系统主php.ini中相同的语法设置你的指令.在PHP手册中列出了所有可设置的指令:您可以设置标有PHP_INI_PERDIR或PHP_INI_ALL,而只有系统管理员可以设置在服务器范围的php.ini那些标记PHP_INI_SYSTEM.
请注意,这样的php.ini指令不会被子目录继承,你必须给它们自己的php.ini.
======================== ===============我的解决方案========= ===================(将你的php.ini重命名为php5.ini)
并在顶部(!),添加以下内容:
magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off extension=pdo.so extension=pdo_mysql.so
然后在.htaccess中,添加它(在顶部):
SetEnv PHPRC /home/your_path/to/public_html/php5.ini
ps /home/your_path/to/
正确更改(您可以通过从典型的.php文件执行命令来查看该路径.)