0

各 Windows マシンの共有ローカル ディレクトリにある作業ファイルを編集して、PHP ベースの Web アプリケーションを開発しています。次に、(Linux) ステージング サーバーが共有ドライブをマウントし、それぞれのサブドメインでそれらを提供します。たとえば、joe.work.com は Joe の作業ディレクトリを提供します。次に、サブドメインがステージング サーバーを指すように hosts ファイルを編集して、独自のステージング サイトにアクセスします。

現在、アップロードされたファイルを tmp ディレクトリからマウントされたディレクトリ内のディレクトリ (実際には共有 Windows ドライブです...?) に移動する権限が PHP にないように見えるという問題に直面しています。

Windows マシンの作業ディレクトリは全員に rw を許可するように設定されており、ステージング マシンのマウントされたディレクトリに 777 を配置しようとしましたが、まだ許可が拒否されます。

たとえば、共有ドライブは\\joes_machine\joes_working_dir、ステージング サーバーの にマウントされます/var/mnt/joe。ファイルのアップロードを に移動する必要があります/images/common

この例では少し馬鹿げていますが、私はコードに関して派手なことは何もしていません。

$working_directory = '/var/mnt/joe';
$image_directory = '/images/common/';
$full_filename = $working_directory . $image_directory . $filename;
if(move_uploaded_file($_FILES['photo']['tmp_name'], $full_filename))
    // do some other stuff

もちろん私のエラーは次のとおりです。

Message: move_uploaded_file(/var/mnt/joe/images/common/resulting_filename.jpg): 
    failed to open stream: Permission denied
Message: move_uploaded_file(): Unable to move '/tmp/phpjsEfBc' to 
    '/var/mnt/joe/images/common/resulting_filename.jpg'

Linux によってネットワーク経由でマウントされている Windows 共有ドライブに関連するファイルのアクセス許可と、それに書き込む必要がある PHP について、私は何を理解していませんか? ハングアップが見つからないようです。

本番環境に入ると、スキーマを使用しなくなりますが、現在の開発環境で継続できる簡単なソリューションがあれば、それが理想的です!

4

1 に答える 1

4

数時間のフェイスローリングの後、私はついに欠けていたものを見つけました。問題は、提供された資格情報がマウントされたディレクトリに期待どおりに書き込めないことでした。これを修正する方法は、マウント コマンドを次のように編集することでした。

mount -t cifs //shared/directory /mount/target
    -o rw,username=connectionuser,password=password,uid=48

ドライブへの接続に使用される Windows 資格情報ですがusername、マウントされたディレクトリに書き込むことができるように、apache が実行されるステージング サーバー上のローカル ユーザーの一意の識別子を指定します。passworduid

以前は、ローカル ユーザーの uid を指定していなかったため、apache がマウントされたディレクトリに書き込もうとしたときに、windows 資格情報を使用しようとしていました (「ローカル」ドライブに書き込めませんでした)。

これが役に立てば幸いです!

于 2013-03-21T00:17:31.523 に答える