2017-09-10 5 views
0

$sourceから$destinationにファイルをコピーしています。Apacheから実行するとPHPのcopy()が失敗するのはなぜですか?

PowerShellからcopy($source, $destination)を実行すると動作します。

私は、Apacheからこのcopy($source, $destination)を呼び出した場合、それは私が手動でエクスプローラを開き、コピー&ペーストファイルができていますcopy(...): failed to open stream: Permission Denied.

を文句を言います。私はWindows Server 2012 R2上でPHP 7.1、Apache 2.4を使用しています。

どうしてですか?誰かが洞察力を提供できますか?

+2

__permission__は何ですか? –

+0

パワーシェルを使用している場合、phpはログインしているのと同じユーザーを使います。 apacheは別のユーザー(通常wwwやwww-データなど)を使用します – Jakumi

+0

@u_mulderターゲットフォルダのプロパティが表示され、すべてのユーザーに「書き込み許可」があります。 – ikel

答えて

1

Windowsの場合Apacheには、ローカルパスに対する大量の読み取り/書き込みアクセス権を持つLocalSystemアカウントで実行されるため、必要なすべてのアクセス許可が既に与えられています。これは、PHPとそれが実行するスクリプトによって継承されます。

問題が、その後がある場合 -

  • 後で設定されている追加のファイルのパーミッションは、(Windowsのイベントビューアを確認してください)、障害です。
  • 設定が間違ってなど、編集された:WPアップロードパスの設定、php.iniの一時フォルダの場所+アップロード設定など
  • は、Apacheサービスの「ログオン」アカウントを「ローカルシステム」から変更されました何か他のもの(サービスのプロパティをチェック)。
  • VirtualHostまたは.htaccessでPHPのopen_basedir設定が有効になっている可能性があり、PHPがアクセスできるパスを制限している可能性があります。
  • PHPの内部エラーがあります(WebサイトのHTTPとPHPのエラーログを確認してください)。

EDIT

それがsugggestedされているので、あなたはポイント3で立ち往生している場合、私は、このソリューションの可能性を追加します。

  • 広範なファイルのアクセス権を持つユーザーを作成し、下に実行するためにアパッチサービスを変更そのユーザー。私は、このためにシステム管理ユーザー(または管理者ユーザー)のプロファイルを使用しないことを強くお勧めします。
+0

+1。私はそれらすべてを通して行きました。すべてうまくいくようです。 Apacheのエラーログは私にしか分かりません。 'コピー(...):ストリームのオープンに失敗しました:許可が拒否されました.'私はWindows Serverにchmodの概念がないと思いますか? – ikel

+0

私はあなたのリストをもう一度見ました!私はこの問題を解決しました。私はポイント3で停止しました。ユーザー名を明示的に使用するようにLocalSystemを変更しました(私には管理者権限があります)。それが問題を解決しました。あなたがこの提案を含めるようにあなたの答えを更新するならば、私はあなたにティックを与えるでしょう!あなたが正しい方向に手助けしてくれたので、私はあなたの更新後にあなたがチックを持つことをお勧めします。 – ikel

+0

@ikelあなたはおそらくadminとしてadminを走らせてはいけません...本当に...あなたはすべきではありません! apacheがアクセスできるようにファイルのアクセス権を変更する必要があります。 – Jakumi

関連する問題