PHP函数是否区分大小写,如果不是......?

时间:2012-05-23 17:21:03

标签: php linux

我在我的PHP代码中使用了很多这样的函数; UID(), user_getProfileImage() ... etc。我正在Windows上编写所有项目并且运行良好。这可以,但是当我把我的项目放在我的服务器上时,它会给出这样的错误;

Fatal error: Call to undefined function UID() in /var/www/vhosts/...

什么?是不确定的?!

我正在检查我的所有项目文件并再次将所有文件FTP到服务器......同样的错误。

但是,当我将UID()的名称更改为uid()时(在 lib.php 和其他使用过的地方),它运行良好。

那么问题是什么?这台服务器有什么问题?

本地PHP版本:5.3.10

服务器PHP信息:http:// ...已删除

注意:我正在使用Notepad ++对所有PHP文件进行“UTF-8无BOM”(一如既往)编码,有趣的是,另一个项目即使使用相同的功能也可以在同一台服务器上运行。

感谢。

/ ############################## /

更新(和解决方案);

  1. 不要在任何函数名称中使用“I”(大写“i”)字符 或
  2. 只需像这样使用setlocale; setlocale(LC_TIME, "tr_TR.UTF-8") //我只需要区域设置时间配置并使用此
  3. 如果您需要LC_ALL,请不要忘记在LC_CTYPE中设置en_US,即:

    setlocale(LC_ALL, "tr_TR.UTF-8"); setlocale(LC_CTYPE, "en_US");

4 个答案:

答案 0 :(得分:3)

这暗示了“我的问题”,当PHP使用土耳其语区域设置(tr_TRtr_TR.utf8 ...)时,它就会显现出来。这样做时,大写和小写字母“i”之间不区分大小写的检查失败。

请参阅https://bugs.php.net/18556 - “将语言环境设置为'tr_TR'降低类名”


您有几个解决方案:

  • 使用相同的字母(或至少字母“i”)定义并调用您的函数;上面或下面并不重要。
  • 使用不受此(错误)行为影响的区域设置。

后者是首选,主要是因为它通常是一个微小变化修复所有问题的任务。

答案 1 :(得分:0)

为什么项目在Windows上正常运行(我想你已经设置了一个开发服务器 - LAMP)而不是在实时服务器上?

我认为实时服务器是Linux发行版上的Apache,所以你应该做的另一项检查是你在脚本中“包含”的文件是确切的文件名(我这样说,例如,如果你包括“lib.php”,而文件的名称是“lib.php”,不会在Windows中引发任何错误,“lib.php”将被正常包含,但在linux(即实时服务器)中包含“Lib.php” “不会起作用,因为文件名区分大小写。

答案 2 :(得分:0)

在Linux上,文件名区分大小写,所以我猜你的UID()函数存在于一个文件或文件夹中,其名称包含错误。检查所有脚本中所有require,require_once,include,include_once语句的完整路径的字符大小写。

答案 3 :(得分:0)

它实际上已知错误,但自2002年以来仍未修复!见#18556

简而言之,PHP使用内部tolower()函数,这是区域设置感知的,但在土耳其语中有一些特定的规则我(undottedı是我的小写,而虚线İ是我的大写字母)。因此,如果您的方法名称的类名具有上层I(newInstanceArgs,Image等),则会受到影响。

现在唯一的解决方法似乎是将LC_CTYPE设置为某些工作区域设置,例如。

setlocale(LC_ALL, 'tr_TR');
setlocale(LC_CTYPE, 'en_US');