php包含中文文件名

时间:2014-12-04 05:21:51

标签: php include filenames

<?php
require_once 'test中文.php';

C:\ Wnmp \ php \ php.exe C:\ Wnmp \ html \ linhe \ test0.php

  

PHP警告:require_once(test中文.php):无法打开流:第4行的C:\ Wnmp \ html \ linhe \ test0.php中没有此类文件或目录

PHP堆栈跟踪:

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

PHP致命错误:require_once():无法在C:\ Wnmp \ html \ linhe \ test0.php中打开所需的'test中文.php'(include_path ='。; C:\ Wnmp \ php \ pear')第4行

PHP堆栈跟踪:

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

流程已完成退出代码255

我知道的事情: test中文.php是一个空白文件;
与梨无关 包括英文文件名就可以了!

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

但同样,由于使用的确切编码可能在两个系统之间有所不同和/或编码可能比简单的iconv调用更复杂,因此处理此问题是一个巨大的痛苦。长答案要复杂得多,通常归结为:坚持使用ASCII文件名。