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

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

내가 아는 것 : 테스트 중문 .php는 빈 파일입니다.
배와 아무런 관련이 없습니다.
영어 파일 이름 포함은 괜찮습니다!

감사합니다.

답변

1

ASCII가 아닌 파일 이름을 처리하는 것은 PHP에서 아주 까다로운 작업입니다. 기본 파일 시스템에 전적으로 위임하기 때문입니다. 파일 이름 자체가 파일 시스템에 저장되는 방법은 시스템에 따라 다르며 시스템마다 크게 다를 수 있습니다. 간단한 대답은 기본 파일 시스템의 인코딩과 일치해야한다는 것입니다. PHP 코드가 UTF-8로 인코딩 된 파일이고 따라서 문자열 "test中文.php"이 UTF-8로 인코딩되었지만 파일 시스템이 실제로 GB18030에 인코딩 된 파일 이름을 저장하면 파일 이름이 일치하지 않습니다. 당신이 뭔가해야 할 것 : 정확한 인코딩이 두 시스템 및/또는 인코딩 간단한 iconv 전화보다 더 복잡 할 수 있습니다 사이에 다를 수 있습니다 사용하기 때문에, 다시

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

하지만를, 그것은 엄청난 고통이다 이걸 처리 할 목에. 긴 대답은 훨씬 더 복잡하며 보통 ASCII 파일 이름을 고집합니다.

+0

예! 나는 $ s = 'test 中文 .php'를 시도했다; $ s = mb_convert_encoding ($ s, 'GB2312'); require_once $ s; –

+0

안녕하세요, 다른 질문하시기 바랍니다, 어떻게 OSS 파일 시스템의 charset을 알 수 있습니까? 감사합니다 –

+0

함수 인코딩 ($ file_name) { if ('WINNT'== PHP_OS) 반환 mb_convert_encoding ($ file_name, 'GB18030'); return $ file_name; } –

관련 문제