1

我有一个运行 PHP 5.3.2 的 Ubuntu 10.04 服务器,并且在我的 php.ini 文件中设置了这些行:

magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

没有其他 php.ini 文件(我搜索了整个硬盘驱动器),我检查了所有 apache2 配置文件(包括整个硬盘驱动器上的所有 .htaccess 文件),并且在其他任何地方都没有引用它们。

然而:

<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    var_dump(get_magic_quotes_gpc());
?>

产生这个输出:int(1) 也就是说,魔术引号是打开的,这很容易通过添加任何类型的带引号的请求来验证,并且它们将被引用。 我已通过将以下内容添加到我的根 .htaccess 文件来解决此问题:

php_flag magic_quotes_gpc Off

上述代码现在产生所需的结果:int(0),并且没有引用输出。

所以问题是:为什么,哦,天哪,为什么,魔术语录一开始就出现了?! 是的,我知道这个问题与其他被问到的问题相似。我不是在寻找“快速修复”,是的,我知道魔术引号将在 php 5.4 中删除。但事实是,在 5.4 发布后(不同的客户端等),我需要在几年内保持向后兼容性,所以我试图弄清楚为什么会出现魔术引号。我知道我可以通过在我的根 .htaccess 文件中添加一行来解决这个问题(如我所展示的那样),但我更希望更深入地了解我的 php.ini 设置是如何被覆盖的。

那么有没有人对如何打开它有任何想法?

4

4 回答 4

1

我今天遇到了同样的问题,发现了这个问题,但没有明显的解决方案!

我终于通过在文件夹magic_quotes_gpc = Off的最后一个文件中应用该行来解决了这个问题/etc/php5/apache2/conf.d,所以似乎有些东西覆盖了原始的 php.ini 文件,但在最后一个包含的文件中再次应用该设置实际上再次关闭了 magic_quotes。

于 2012-03-08T12:50:42.917 回答
1

我终于想通了; 更新 apache2 和 php5:

apt-get update
apt-get install apache2 php5

这是 apache2 和/或 php5 中某些版本的错误。Debian 的 apt 世界中的版本已更新,因此只需更新即可解决问题。

于 2012-03-16T08:19:59.560 回答
0

在它的输出顶部PHPinfo()告诉你实际使用的 php.ini 文件。

没有其他 php.ini 文件(我搜索了整个硬盘驱动器),我检查了所有 apache2 配置文件(包括整个硬盘驱动器上的所有 .htaccess 文件),并且在其他任何地方都没有引用它们。

也没有魔法。
如果已设置 - 它已设置在某处。

于 2012-03-06T07:05:03.773 回答
0

这对我有用:

我变了:

; Magic quotes
;


; Use Sybase-style magic quotes (escape ' with '' instead of \').
  magic_quotes_sybase = 0
  magic_quotes_gpc = 0
  magic_quotes_runtime = 0

到:

; Magic quotes
;


; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = 0
magic_quotes_gpc = 0
magic_quotes_runtime = 0

在设置之前有空格,并且浪费了数小时的时间来搜索 magic_quotes 的每个实例,以及每个 php.ini 文件或任何 .ini 文件。

(我在 drush.ini 中的 .drush 目录中执行此操作,但它可能在 php.ini 中有效)

于 2013-09-05T01:05:27.650 回答