当前位置:  开发笔记 > 编程语言 > 正文

如何在共享主机上关闭魔术引号?

如何解决《如何在共享主机上关闭魔术引号?》经验,为你挑选了5个好方法。

我想关掉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'),但这没有效果.

如何关闭魔术报价?



1> Peter Bailey..:

根据手册,您通常可以在共享主机上安装自定义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 );
}



2> Powerlord..:

虽然我不能说为什么php_flag会给你500 Internal Server Errors,但我会指出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);
}
?>



3> gonzo..:

这将解决在创建本地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个小时,它刚刚带走了我!


好悲伤,这正是我所需要的.死亡引用.

4> djn..:

.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.



5> T.Todua..:

======================== ===============我的解决方案========= ===================(将你的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文件执行命令来查看该路径.)

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有