我在我的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”(一如既往)编码,有趣的是,另一个项目即使使用相同的功能也可以在同一台服务器上运行。
感谢。
/ ############################## /
更新(和解决方案);
setlocale(LC_TIME, "tr_TR.UTF-8")
//我只需要区域设置时间配置并使用此如果您需要LC_ALL
,请不要忘记在LC_CTYPE
中设置en_US
,即:
setlocale(LC_ALL, "tr_TR.UTF-8"); setlocale(LC_CTYPE, "en_US");
答案 0 :(得分:3)
这暗示了“我的问题”,当PHP使用土耳其语区域设置(tr_TR
,tr_TR.utf8
...)时,它就会显现出来。这样做时,大写和小写字母“i”之间不区分大小写的检查失败。
请参阅https://bugs.php.net/18556 - “将语言环境设置为'tr_TR'降低类名”
您有几个解决方案:
后者是首选,主要是因为它通常是一个微小变化修复所有问题的任务。
答案 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');