同一支程式在 Linux 伺服器正常,移至 Windows 開發環境卻報錯 failed to open stream: No such file or directory。經排查為 set_include_path() 多路徑分隔符不同:
;:// 錯誤寫法(寫死分隔符)
set_include_path(get_include_path() . ':/path/to/lib'); // Linux only
set_include_path(get_include_path() . ';C:\path\to\lib'); // Windows only
// 正確寫法(自動適配)
set_include_path(
get_include_path()
. PATH_SEPARATOR
. __APP_ROOT_PATH__
. DIRECTORY_SEPARATOR . 'Library'
. DIRECTORY_SEPARATOR . 'ZF'
. DIRECTORY_SEPARATOR
);
require 'Zend/Loader.php';
| 常數 | 用途 | Windows 值 | Linux 值 |
|---|---|---|---|
| PATH_SEPARATOR | include_path 多路徑分隔符 | ; | : |
| DIRECTORY_SEPARATOR | 目錄路徑分隔符 | \ | / |