0

写真をのようなフォルダ構造にアップロードするPHPXML解析スクリプトがあります/content/images/2012/05/31/%object_id%/。このパーサーは、主にDirectAdmincronジョブとして実行されます。ブラウザを介してパーサーを実行する場合と両方のcronジョブでそのディレクトリにアップロードできるようにするために、フォルダのアクセス許可を正しく取得する際に多くの問題が発生します。

ディレクトリの所有者によるとprint_r(posix_getpwuid(fileowner($directory)));はと同じget_current_user()です。それにもかかわらず、私は受け取ります:Warning: mkdir() [function.mkdir]: Permission deniedブラウザを介してスクリプトを実行するとき。cronジョブとして実行すると正常に動作します。

すべてのフォルダにはchmod0777があり、新しいフォルダはそのように作成されます。

mkdir($path,0777,true);

当然、ファイル自体のアップロードや削除に関しても同じ権限の問題があります。

cronジョブとブラウザの両方で実行されているすべてのファイルアクションを有効にする方法はありますか?

LinuxをPHPバージョン5.2.17で実行しています。

4

1 に答える 1

1

get_current_user は .php ファイル (つまりスクリプト) の所有者を取得しますが、php スクリプトを実行しているユーザーの名前は取得しません。ファイルはあなた (通常のユーザー) によってアップロードされ、php/apache は別のユーザー (しばしば "apache" または "www" と呼ばれます) として実行されるため、これらは常に異なります。これら 2 つのうち後者が必要です。これを取得するためのphpマニュアルからの推奨スニペットは次のとおりです。

$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];

(http://php.net/manual/en/function.get-current-user.php - コメントを参照)


ただし、現在の問題を解決するために、php/apache が実行されているのと同じユーザーとして cron を実行することを強くお勧めします (crontab のマニュアル ページを確認してください)。ユーザーは上記のスニペットのユーザーである必要があります。ファイルを CHOWN します。およびディレクトリを同じユーザー (現在は root になります) と、あなたと FTP クライアントの間で共有されているグループに送信します。次に、ftp からも編集できるように、ユーザーとグループに読み取りと書き込みのアクセス許可があることを確認します。スクリプトがディレクトリ (775) とファイル (644) を作成するときに、それらの両方のアクセス許可を必ず変更してください。

また、mkdir() を実行する場合は、上記のディレクトリにもユーザーの書き込み権限が必要であることに注意してください (これは実際には最初の問題であり、root/cron だけがそこに書き込める理由です)。

于 2012-05-31T11:49:02.797 に答える