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

C: \ Wnmp \ PHP \ php.exe C: \ Wnmp \ HTML \ Linhe \ 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; –

+0

привет, еще один вопрос, пожалуйста, как узнать кодировку os файловой системы! Спасибо –

+0

function Encoding ($ file_name) { if ('WINNT' == PHP_OS) return mb_convert_encoding ($ file_name, 'GB18030'); return $ file_name; } –

Смежные вопросы