2014-12-04 38 views
0
<?php 
require_once 'test中文.php'; 

C:\ WNMP \ PHP \的php.exe C:\ WNMP \ HTML \临河\ test0.phpPHP的包括中国名

PHP Warning: require_once(test中文.php): failed to open stream: No such file or directory in C:\Wnmp\html\linhe\test0.php on line 4

PHP堆栈跟踪:

PHP 1. {main}() C:\Wnmp\html\linhe\test0.php:0 

PHP Fatal error: require_once(): Failed opening required 'test中文.php' (include_path='.;C:\Wnmp\php\pear') in C:\Wnmp\html\linhe\test0.php on line 4

PHP堆栈跟踪:

PHP 1. {main}() C:\Wnmp\html\linhe\test0.php:0 

处理完成退出代码255

我知道的东西: test中文.php是一个空白文件;
与梨没有关系。
包括英文文件名是好的!

谢谢!

回答

1

处理非ASCII文件名在PHP中非常棘手,因为它完全委托给底层文件系统。文件系统本身如何存储取决于您的系统,并且可能在不同系统之间存在很大差异。简短的答案是:您需要匹配底层文件系统的编码。如果您的PHP代码采用UTF-8编码文件,因此字符串"test中文.php"采用UTF-8编码,但文件系统实际上存储了编码的文件名,例如GB18030,则文件名不匹配。你不得不做这样的事情:再次

$file = 'test中文.php'; 
$file = iconv('UTF-8', 'GB18030', $file); 
require_once $file; 

但是,因为准确的编码使用可以在两个系统和/或编码可能比简单的iconv通话更加复杂之间的差异,这是一个巨大的痛苦在脖子上处理这件事。长的答案要复杂得多,通常归结为:只要坚持ASCII文件名。

+0

是的!我试过$ s ='test中文.php'; $ s = mb_convert_encoding($ s,'GB2312'); require_once $ s; – 2014-12-04 05:54:32

+0

嗨,请问另一个问题,我怎么知道os文件系统的字符集!谢谢 – 2014-12-04 09:15:15

+0

功能编码($ file_name){ if('WINNT'== PHP_OS) return mb_convert_encoding($ file_name,'GB18030'); return $ file_name; } – 2014-12-04 09:39:01