共有ホスティングからVPSに移行中です。移動前に正常に実行されていたコードが、次の行で失敗しています。
_require_once($_SERVER['DOCUMENT_ROOT'] . 'includes/content/header.php');
_
エラーログによると:
PHPの致命的なエラー:require_once():/ srv/www/hostnameでrequired '/ srv/www/hostname/public/includes/content/header.php'(include_path = '。:/ usr/share/pear')を開くことができませんでした3行目の/public/index.php
ドキュメントルート部分なし、_./
_ありとなし、同じディレクトリ内のファイルなど、同じ行を試しましたが、うまくいきませんでした。 require
、_include_once
_、またはinclude
とも違いはありません。それでも、エラーログからコピーして貼り付け、ファイルにcd
ingすることで、ファイルがその正確な場所に存在することを確認できます。
[〜#〜] so [〜#〜] でこの質問をしましたが、誰かがサーバーの問題である可能性が高いと言ったので、ここで言い直します。 (私がここで見つけた最も類似した質問は 答えられなかった でした)試みの要約:
php.ini
_で「オフ」に設定されています。dirname(__FILE__)
およびexec('pwd')
は_$_SERVER['DOCUMENT_ROOT']
_と同じものを返しますが、末尾にスラッシュはありません。どちらか一方のプレフィックスを付けても違いはありません。include
、_include_once
_、fread
、_file_exists
_、_file_get_contents
_、およびrealpath(dirname(__FILE__))
はすべてfalseを返します。set_include_path()
は効果がありません。php-cgi
_経由でrequire
を実行すると、内部サーバーエラーが返され、include
は空白の出力を返します。 php
を介して実行すると、空白の出力が返されます。これが私の仮想ホスト設定です:
_<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/srv/www/hostname/public/"
ServerName hostname.com
ServerAlias www.hostname.com
SuexecUserGroup hostname hostname
ErrorLog "/srv/www/hostname/logs/error.log"
LogLevel debug
CustomLog "/srv/www/hostname/logs/access.log" combined
<Directory /srv/www/hostname/public>
Order allow,deny
Allow from all
</Directory>
# http://www.linode.com/forums/viewtopic.php?t=2982
<IfModule !mod_php5.c>
<IfModule !mod_php5_filter.c>
<IfModule !mod_php5_hooks.c>
<IfModule mod_actions.c>
<IfModule mod_alias.c>
<IfModule mod_mime.c>
<IfModule mod_fcgid.c>
AddHandler php-fcgi .php
Action php-fcgi /fcgid-bin/php-fcgid-wrapper
Alias /fcgid-bin/ /srv/www/hostname/fcgid-bin/
<Location /fcgid-bin/>
SetHandler fcgid-script
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
ReWriteEngine On
ReWriteRule ^/fcgid-bin/[^/]*$ / [PT]
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</VirtualHost>
_
open_basedir
が/srv/www/hostname/public/includes/content/
の親ディレクトリ以外に設定されているかどうかを確認します。これにより、そのファイルを開いたり含めたりすることがブロックされます。また、開いているファイルがopen_basedirの外部にあるものへのシンボリックリンクではないことを確認してください。
これは通常、open_basedirが原因でファイルがブロックされたことを示す警告レベルのメッセージを出力しますが、エラーが無効になっている(または少なくともE_WARNINGが無効になっている)場合、メッセージは表示されません。
装置がインストールされていますか?インストールされている場合、Apacheプロセスがアクセスできるものが制限されますか? (/etc/apparmor.dを確認してください)
さらに、次のようなことを試してください。
Sudo -u hostname cat /srv/www/hostname/public/includes/content/header.php
それはあなたに何を与えますか?