【问题标题】:Configuration quotes on variables in PHPPHP中变量的配置引号
【发布时间】:2023-03-30 16:32:01
【问题描述】:

我是该网站的新手(嗨!),我遇到了一个我还无法解决的问题。我找了,但没有结果……我认为这是一件愚蠢的事情,但我找不到解决方案。

我正在将系统 (PHP) 迁移到其他服务器(两者都是 CentOS),我对 PHP 变量中的引号有疑问:

    Example:
    --------
    $_GET[var]
    $db_reg[assoc]
    $array[value]
    define(NAME,'value')
    etc..

所有情况都可以修复在索引中添加引号,但我有数千个 PHP 文件,每个文件有数百万行,我无法一一检查...大约需要两个人半的生命。

在旧的服务器上可以正常工作,但是在新的服务器上,变量不识别,显示PHP提示:

“注意:使用未定义的常量 XXXX - 假定 'XXXX in...” (ej: $_POST[XXXX])

Apache 或 PHP 中是否有用于识别或不识别(模糊)变量引号的配置?

两台服务器上的PHP版本是一样的,我查了php.ini文件,都差不多。

【问题讨论】:

  • 我认为解决此问题的最佳方法是将所有旧脚本转换为使用引号。我知道这听起来很吓人,根据您的描述,一次手动操作可能不可行。扫描所有源代码并将所有出现的 [something] 更改为 ['something'] 可能是一个有趣的编程挑战。当然,您必须对 [$something] 等有例外。但这是现在的正确方法(实际上一直如此)。 PHP 最终可能会放弃任何其他解决方法。
  • 我知道,正确的方法是改变一切..但是系统老旧过时,事实上,我正在从零开始重新制作它..所以,我认为没有必要,我想肯定地埋葬......无论如何谢谢:)

标签: php apache centos config quote


【解决方案1】:

我猜你需要一些关于变量及其用法(使用数组时)和固定索引具体的信息。

变量的使用:

$array = array('hi', 'you', 'there');
$i = 1;
echo $array[$i]; // -> Works and is **fine** (will output 'you')

// --------------------------------

$array = array('a' => 'hi', 'b' => 'you', 'c' => 'there');
echo $array['a']; // -> Works and is **fine**
// Note: in especially that case **NEVER** use barewords like this: echo $array[a] for >> a << here is expected to be a constant which (mostly) does not exist!
// PHP is so fuzzy that it will mostly interpret around like insane and output you the desired value ('hi' in that case), but that was never meant to be! And should always be prevented. That's the reason for you getting that notice...

// So never do this:
echo $array[a];
// ... if >> a << is NOT a valid and available constant

重要(总结要点):

不带引号的单词和美元被认为是您可能不经常使用的常量。在大多数情况下,您使用引号(如上所述)或实变量(由$ 标识)作为索引来访问数据结构/数组。

【讨论】:

  • 感谢您的回复!但是有什么方法可以配置(apache、php 等)以不带引号识别吗?我无法更改系统上的每个变量。为什么旧服务器运行良好而新服务器失败?一定有什么我想念的......谢谢
  • @Daniel 欢迎您。请将帮助您解决问题的答案标记为“解决方案”。这使得遇到相同问题并找到您的问题的人也能够轻松地确定他们问题的答案。
  • 谢谢您.. 当您找到解决方案时,我会记住这一点 :)
  • 啊,现在我明白了你的问题的目的。对不起。如果我现在理解你是正确的,那么你想要更改 PHP 语言结构/php 解释脚本代码的方式。因此,就好像您将尝试将“ret”定义为别名或替换“return”。我认为您在使用最新版本时无法将其带回 php。也许在新服务器上使用旧版本是实现目标的唯一方法。我猜有一些网络服务器模块可以让你为指定的脚本加载旧的 PHP 版本。但这至少需要您成为服务器管理员。
  • 我刚刚测试过,似乎可行!也许我在使用 define(NAME,'value') 而不是带引号的 define('NAME','value') 时遇到了问题,并且我认为其他变量也失败了。正如我所说,系统太大而我没有这样做..所以我必须继续检查可能是什么问题...我确定问题出在那种方式...谢谢!我标记了这个答案,对吧?
【解决方案2】:

好吧,你可以尝试编辑 php.ini 文件:

改变

error_reporting=E_ALL

error_reporting = E_ALL & ~E_NOTICE

这将禁用所有通知,但我不确定这是否可以解决您的问题。请尝试让我们知道这是否适合您。

【讨论】:

  • 这不是抑制警告的正确方法,因为它们被打印是有原因的。正确的方法更多是修复导致php打印出警告的原因。无论如何,这比人们学习编写更干净的代码更容易
  • 谢谢!但我的问题不是打印警告或通知..问题是系统由于没有引号的变量而无法正常工作......我需要激活类似“识别没有引号的变量”之类的东西跨度>
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 2014-10-10
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 2016-11-15
相关资源
最近更新 更多