Windows上のApacheでPHP対応のWebサイトを実行できませんXP DOCUMENT_ROOTへのパスにアクセント付きの文字が含まれている場合、参照していませんスクリプトファイル名はそれ自体ですが、パスコンポーネント内の任意のフォルダに付けられます。
私はこの仮想ホストの定義を持っています:
<VirtualHost *:80>
ServerName foo.local
DocumentRoot "E:/gonzález/sites/foo"
ErrorLog logs/foo.local-error.log
CustomLog logs/foo.local-access.log combined
<Directory "E:/gonzález/sites/foo">
AllowOverride All
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
...ただし、PHP * .phpファイル(空のファイルでも)をロードするときの苦情:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'E:/gonzález/sites/foo/vacio.php' (include_path='.;C:\Archivos de programa\PHP\pear') in Unknown on line 0
ディレクトリの8+ 3の短い名前を試してみることにしました(単なるテストであり、このような回避策は使用したくありません)。
<VirtualHost *:80>
ServerName foo.local
DocumentRoot "E:/GONZLE~1/sites/foo"
ErrorLog logs/foo.local-error.log
CustomLog logs/foo.local-access.log combined
<Directory "E:/GONZLE~1/sites/foo">
AllowOverride All
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
しかし、私は同じ振る舞いをします:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'E:/gonzález/sites/foo/vacio.php' (include_path='.;C:\Archivos de programa\PHP\pear') in Unknown on line 0
明らかな回避策がありますが(すべてのディレクトリ名でプレーンASCIIを使用するか、NTFSジャンクションを作成して実際の名前を非表示にする))これができないとは信じられません。件名?
私の仕様には、Apacheモジュールとして実行されている32ビットWindows XP Professional SP3、Apache/2.2.13、PHP/5.2.11)が含まれています(ただし、WindowsVistaとPHP/5.3.1)。
私はNTFSを使用しており、WindowsコードページはWin-1252です(これはスペイン語版のWindowsです)。おそらくそれは関連しています:-?
PHP includeまたはrequires、include_pathまたはその他のPHPコードの一部に問題はないことに注意してください。私の問題はPHPインタープリターは、*。php拡張子の付いた静的HTMLドキュメントであっても、PHPスクリプト自体を検出しません。
さらに読むと、 PHPはWindows APIによって提供される2バイト関数を使用しません のように見えます。私が間違えない限り、これは私がやりたいことが不可能であることを証明しているようです。
Apacheは、長いバージョンへのパスを解決してからPHP UTF-8でエンコードされています。PHPファイル関数は、WindowsのANSI APIを使用し、ファイル名のUnicodeを処理できません。
Apache/PHPで同様の問題に直面したことを覚えています。 1つの解決策は、Unicode文字のみを使用しない名前を使用して、フォルダーへのある種のNTFSシンボリックリンクを作成することです。
例:E:\ sites => E:\gonzález\ sites
ウィキペディアのNTFSシンボリックリンク: http://en.wikipedia.org/wiki/NTFS_symbolic_link
Microsoftからmklink.exeユーティリティを入手して、コマンドラインからそのようなリンクを作成できます。 http://technet.Microsoft.com/en-us/library/cc753194(WS.10).aspx ==
次のコマンドを試すことができます。
mklink /D E:\sites E:\gonzález\sites
Link Shell Extensionは、Windows Shellと統合してNTFSボリューム上のシンボリックリンクを管理するフリーソフトウェアです(リンクは上記のWikipediaの記事にあります。または、適切な検索エンジンで「Link ShellExtension」を検索できます)。
英国では_Apache/2.2.8
_と_PHP/5.2.5
_、require()
はANSI
/_UTF-8
_/_UTF-8 +BOM
_でエンコードされています。
このページから例(_E:/gonzález/
_)をコピーし、テストスクリプト(ANSI
、正常に動作)を作成してから、さまざまなエンコーディングをテストしました。おそらくあなたは同じ方法を試すことができますか?