2
if ( !is_writable( $save_path ) ){
    mkdir( $save_path, 0777, true );
}
$uploadfile = $save_path . basename($_FILES[$form_field_name]['name']);
if ( is_writable( $save_path ) ){
    move_uploaded_file($_FILES[$form_field_name]['tmp_name'], $uploadfile)
}

これにより、アップロード ディレクトリ内に新しいディレクトリが作成されます。サーバーにパテして ls -la を実行すると、アクセス許可/所有権を使用してディレクトリが作成されます。

drwxr-xr-x Apache Apache

偉大な。ただし、アップロードされたファイルをその新しいディレクトリに移動すると、次のエラーで失敗します。

SAFE MODE 制限が有効です。uid が 0 のスクリプトは、uid 48 が所有する /var/www/vhosts/domain.com/httpdocs/media/uploads/DE へのアクセスを許可されていません

OK、エラーがどのように発生しているかがわかります-所有者とグループが「apache」に設定された状態で新しいフォルダーが作成され(ユーザー48だと思います)、ユーザー「root」はそれにアクセスできません(ユーザー0はrootです) 、 右?)。そして、セーフモードも私が777としてディレクトリを作成するのを止めており、その無限の知恵で、私が要求したことをしないことを決定したと思います。

しかし...私のPHPスクリプトはどのようにディレクトリを「apache」として作成し、ルートとしてそれらに移動しようとしていますか? そして、斧をセーフモードにせずにどうすればそれを回避できますか?

4

1 に答える 1

0

PHPドキュメントによると:

http://php.net/manual/en/function.mkdir.php

注:セーフモードが有効になっている場合、PHPは、スクリプトが動作しているディレクトリに、実行されているスクリプトと同じUID(所有者)があるかどうかを確認します。

自分のものが正しいユーザーの下で実行されていることを確認してみませんか。エラーを考えると、PHPスクリプトが別のユーザーで実行されているように思われます。(注:apacheはrootとして実行される傾向があります)

于 2012-03-12T17:58:22.703 に答える