open_basedir制限が有効です。ファイル(/)が許可されたパス内にありません:


87

自分のサイトのアバターアップロードでこのエラーが発生します。私はこれまでにそれを取得したことがなく、このエラーが発生し始めるために最近何も変更されていません...

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

18
あなたは機能しない答えを受け入れました。
sjas 2015

回答:


-22

PHP構成のopen_basedir設定を変更しますランタイム構成を参照)。

このopen_basedir設定は主に、特定のユーザーのPHPスクリプトが別のユーザーのアカウントのファイルにアクセスできないようにするために使用されます。したがって、通常、自分のアカウントのファイルはすべて、自分のスクリプトで読み取ることができます。

.htaccessPHPがLinuxシステムでApacheモジュールとして実行される場合の設定例:

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

2
@Nikeshこれを.htacccesにドロップし、パスを次のように変更した後、500エラーが発生しました/my/cutsom/dir/。なぜ考えたのかわからない。
hitautodestruct 2013年

79
かっこいい、これまでのところ、間違った答えに対して12の賛成票があります。あなたは使用することはできませんphp_admin_value.htaccessファイル.htaccessファイルでDirectoryMatchを使用することはできません。(open_basedir無効にできるとしたら、どのようなセキュリティ対策が必要ですか?)
アルバロゴンサレス

1
@ eoinoc-下にスクロールして、Andreiの答えなどを確認します。または、グローバルphp.iniファイルを編集します。
アルバロゴンサレス

19
あなたはこれをあなたのHTACCESSに入れないでください!しかし、APACHE設定ファイルにレイザーします。
tfont 2013

8
open_basedirにルートディレクトリを含めると、open_basedirの目的が完全に無効になります。このソリューションは、本質的に制限を無効にするという意味でのみ「機能」します。
マーティン

113

ホスティングアカウントのopen_basedir設定を変更し、noneに設定します。Plesk / cPanelの「PHP設定」領域にあるopen_basedir設定を見つけます。そこにあるドロップダウンから「なし」に設定します。Pleskパネルの写真でそれらを示しました。

ここに画像の説明を入力してください ここに画像の説明を入力してください


1
@yogihostingこれを行った後、エラーが発生しました-指定したモデルが見つかりません:Home_model
Heemanshu Bhalla 2016

1
これには少し遅れていますが、すべてのpleskサイトでそれを行う方法はありますか?サイトが使用しているバージョンのグローバルphp.iniでnoneに設定しています:gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 しかし、それでもエラーが発生します。
マットカウリー2016

@MattCowley pleskパネルでホストされているすべてのサイトに対して、これを行う必要があります。
yogihosting 2016

1
非常に役立つ回答、私の問題は親指を
立てて

1
この解決策をありがとう!これは共有ホスティングで私にぴったりです!
Smilefounder 2017

38

このエラーを解決するには、ファイルhttpd.confを編集する必要があります。phpinfoのapache2handlerセクションディレクティブサーバールートで確認できるようになるずっと前のことです。たとえば、私の場合はこのように-/ etc / httpd /httpd.conf。ファイルhttpd.confを開き、パラメーターopen_basedirの記述を見つけます。そして、それをnoneに設定します。(php_admin_value open_basedir none


'none'に設定すると、Pleskインターフェイスも使用できました。
diggersworld 2014

8
open_basedir構成を見つけましたphp.ini。(
php5

2
私のphp.ini(またArch)にもあります。この回答と同じ効果を達成するには、行をコメントアウトするだけです。
ベンエルガー

ちょうどラインは、作品を言及したコメントで、私はちょうど求めています@BenElgarがあり危険である
mwangaben

6

これをで実行している場合php file.phpphp.ini このファイルを検索を編集する必要があります。

: locate php.ini
/etc/php/php.ini

そして、ファイルのパスをopen_basedirプロパティに追加します。

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected


これは、セキュリティを完全にスキップするのではなく、複数の特定のパスを指す唯一のソリューションです。
mvreijn

5

私にとっての問題は、すべてを実行しているPleskサーバーの設定値が悪い/欠落していることでした。私はここの指示に従いました:http//davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

VirtualHost定義ごとに個別のエラーログファイルを持つようにPHPを構成できます。Pleskを壊さずに構成に直接触れることはできないため、その設定方法を正確に知ることが秘訣です。(dv)のすべてのドメイン名には、/ var / www / vhostsに独自のディレクトリがあります。一般的なディレクトリには、次の最上位ディレクトリがあります。

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

次の行を使用して、ドメインディレクトリのconf /フォルダにvhost.confファイルを作成する必要があります。

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

実際のインストールに一致するように最初の値を変更します(私は/tmp/phperrors.logを使用しました)。vhost.confファイルの編集が完了したら、コンソールから次のコマンドを使用して構成をテストします。

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

そして最後に、この変更を行ったことをPleskに伝えます。

/usr/local/psa/admin/bin/websrvmng -a

2

参照しているパスが正しくなく、ワークスペースのdirectoryRootを使用していません。アクセスしたいファイルの絶対パスを作成してみてください。おそらく相対パスを使用しています...


絶対パスを使用しています。これを除くすべてのユーザーで機能します。
Webnet

2

ispconfig3でこの種の問題が発生し、次のようなエラーが発生した場合

open_basedir制限が有効です。ファイル(/ var / www / clients / client7 / web15)が許可されたパス内にありません:........。

これを解決するには(私の場合)、ispconfig3のWebサイトのパネルでPHPをSuPHPに設定するだけです。

それが誰かを助けることを願っています:)


2

更新および/または移動した後、私のワードプレスサイトの1つでこの問題が発生しました:)

データベーステーブル 'wp_options''upload_path'をチェックインし、適切に編集します...


どの値に設定しましたか?/ [...] / public_html / wp-content / uploads?
brett 2018年

1

ispconfig3を使用する場合:

Webサイトセクション->オプション-> PHP open_basedirに移動します:

ここに画像の説明を入力してください

  • このフィールドには許可されたパスが記述されており、各パスは「:」で区切られています。

/ var / www / clients / client2 / web3 / image:/ var / www / clients / client2 / web3 / web:/ var / www / ...など

  • したがって、ここにアクセスしたいパスを入力する必要があります。私の場合は次のとおりです。

/ var / www / clients / client2 / web3 / image:

  • 問題が発生する理由は次のとおりです。

スクリプトがファイルシステムにアクセスしようとすると、たとえばincludeまたはfopen()を使用して、ファイルの場所がチェックされます。ファイルが指定されたディレクトリツリーの外にある場合、PHPはそのファイルへのアクセスを拒否します。


0

PHP IISスタックを実行していてこのエラーが発生した場合、通常は簡単なアクセス許可の修正です。

Windowsサーバーを自分で管理してアクセスできる場合は、最初に次のことを試してください。

書き込みに苦痛を与えているフォルダに移動し、右クリック>プロパティを開く>セキュリティ。

どのユーザーがフォルダーにアクセスできるか、どのユーザーが読み取り専用で、どれがいっぱいかを確認します。書き込みをブロックしているグループがありますか?

修正はIISセットアップに固有ですが、特定のユーザーIUSRまたはアプリケーションプールIDで匿名認証を使用していますか?

いずれにせよ、IUSR、IIS_IUSRS、またはアプリケーションプールIDのいずれかに新しい完全な書き込みアクセス許可を追加することになります-私が言ったように、これはセットアップとそれをどのように行うかによって異なります、これでグーグルのうさぎの穴を掘り下げることができます(そのような投稿の1つ-IIS8のIIS_IUSRSとIUSRのアクセス許可)私にとっては、アプリプールIDでanonを使用しているのでMACHINE_NAME\IIS_IUSRS、任意の一時またはアップロードで完全な読み取り/書き込みを行うことができますフォルダー。

open_basedir =php.iniに何かを追加する必要はありません。


0

@yogihostingの回答に加えて、DirectAdminを使用している場合は、次の手順に従います。

  1. DirectAdminのログインページに移動します。通常、そのポートは2222です。
  2. 管理者としてログインします。そのユーザー名はadminデフォルトです。
  3. 右側のパネルの「アクセスレベル」から、「管理者レベル」になっていることを確認します。そうでない場合は、それに変更します。
  4. 「追加機能」セクションから、「カスタムHTTPD構成」をクリックします。
  5. 変更するドメインを選択します。
  6. ページ上部のテキスト領域に変更する構成を入力します。既存の構成ファイルを検討し、それに基づいて値を変更する必要があります。たとえば、それopen_basedirがの中に設定されている<Directory>場合は、関連する<Directory>タグで変更を囲む必要があります。

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. 必要な変更を加えた後、「保存」ボタンをクリックしてください。

  8. 変更が有効である場合は、構成ファイルに保存された変更が表示されます。

ただし、構成ファイルを編集する別の方法があります。

注意:エラーが発生したり、ダウンタイムが発生したりする可能性があるため、注意して、自己責任で次の手順を使用してください。推奨される方法は、構成ファイルを不適切に変更してエラーを表示するのを防ぐため、前の方法です。

  1. rootとしてサーバーにログインします。
  2. に移動し/usr/local/directadmin/data/usersます。リストされたユーザーから、変更するドメインに関連するユーザーに移動します。
  3. ここにhttpd.confファイルがあります。それからバックアップを作成します。

    cp httpd.conf httpd.conf.back
    
  4. 次に、選択したエディターで構成ファイルを編集します。たとえば、existingopen_basedirをに編集しnoneます。物を取り除こうとしないでください。ダウンタイムが発生する可能性があります。編集後にファイルを保存します。

  5. 次のいずれかの方法を使用してApacheWebサーバーを再起動します(sudo必要に応じて使用します)。

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. エラーが発生した場合は、メインの構成ファイルをバックアップファイルに置き換えて、Webサーバーを再起動します。

繰り返しになりますが、最初の解決策が推奨される解決策であり、最初に2番目の方法を試すべきではありません。注意事項に記載されているように、最初の方法の利点は、構成が不適切なものを保存できないことです。

それが役に立てば幸い!


0

私は、Apache使用していますバーチャルホストの私のWindowsサーバー上のアプリケーション固有のINI-オプションでPHPを実行する-ファイルを。したがって、phpコマンドの-dオプションを使用します。

これらのオプションの1つとして、すべてのアプリケーションのopen_basedirを設定しています。

UNC-Pathを含む複数のURLをopen_basedirとして設定する必要があり、この場合の構文を見つけるのは少し困難でした。パスをセミコロンで区切る必要があります。最初のパスがドライブレターで始まる場合は、リストもセミコロンで始める必要があります。少なくともそれが私にとってはうまくいくことです。

例:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

-3

検索するだけ

open_basedir =

php.iniで無効にします。これは、この問題を解決するための最も簡単な解決策です。

変更前 open_basedir =

変更後 ;open_basedir =

追伸-変更後は、サーバーを再起動することを忘れないでください。

楽しい ;)


3
これをしないでください...セキュリティは、信じられないかもしれませんが、重要です。:)あなたのツールのドキュメントを読む時間:php.net/manual/en/ini.core.php#ini.open-basedir
アダムLenda
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.