4

中規模のアプリケーションを作成しています。

このアプリケーションは、多くの製品で構成されています。

現在、これらの製品には多くの画像があります (1 つの製品に 5 ~ 6 個の画像を含めることができます)。

ある種の注文を試みるために、製品ごとに 1 つのフォルダーを作成したいと考えています。このフォルダーには、製品にバインドされているすべての画像が含まれています。

これまでのところ、次のことを試しました。

move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name']);

ただし、これを試してみると、次のエラーが発生します。

Warning (2): move_uploaded_file(/var/www/udlejnings-priser/cake/app/product_images/22/afterClick.png): failed to open stream: No such file or directory [APP/Controller/ImagesController.php, line 56]

Warning (2): move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php472ci6' to '/var/www/udlejnings-priser/cake/app/product_images/22/afterClick.png' [APP/Controller/ImagesController.php, line 56]

今、私は完全な初心者ではなく、これはフォルダーへのアクセス許可がないことを意味することを知っています.

ただし、問題は、フォルダが存在しない場合 (つまり、その製品の画像が初めてアップロードされる場合)、新しいフォルダを作成する必要があることです。

私の質問は 2 つの部分です。

  1. まだ存在しない場合、これは自動的に新しいフォルダーを作成しますか?
  2. この問題を回避するために、新しく作成したフォルダーにアクセス許可を与えるにはどうすればよいですか?
4

4 に答える 4

5

[私] これは、フォルダーへのアクセス許可がないことを意味することを知っています。

実際にはいいえ=)。エラーメッセージは次のとおりです。

ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません

アクセス許可を参照していない問題は次のとおりです。書き込もうとしているフォルダーが存在しません。

まだ存在しない場合、これは自動的に新しいフォルダーを作成しますか?

いいえ。

新しく作成したフォルダにアクセス許可を与えるにはどうすればよいですか?

そうする必要はありません - 作成されたものはすべて、ウェブサーバーのユーザーがファイルを読むことを許可する正しいパーミッションを持ちます。ただし、最初にフォルダーを作成してみる必要がありますが、これは問題ではありません。

CakePHP を使用すると、Folder クラスを使用してそれを行うことができます。

App::uses('Folder', 'Utility');
$dir = new Folder('/path/to/folder', 2);

2 番目のパラメーターは、存在しない場合に新しいフォルダーを作成するために使用されます。質問のコンテキストでは、コードは次のようになります。

function whatever() {

    if ($this->request->data) {
        ...
        
        $unused = new Folder(APP.'product_images/'.$product_id, true);
        if (move_uploaded_file($file, APP.'product_images/'.$product_id.'/'.$image['name'])) {
            ...
        } else {
            ...
        }
    }
}

フォルダーAPP/product_images既に存在している必要があり、Web サーバー ユーザー (例: apache) が書き込みできる権限を持っている必要があります。そうしないと、サブフォルダー/アップロード ファイルを作成できません。が存在し、Web サーバーのユーザーが書き込み権限を持っていると仮定APP/product_imagesすると、アップロードされたファイルの権限を変更する必要はありません。ユーザーが作成したファイルは、デフォルトでそのユーザーが読み取ることができます。

于 2013-10-26T17:29:27.077 に答える
4

これを試して:

if (!file_exists('path/to/directory')) {
    mkdir('path/to/directory', 0777, true);
}

1)これは、まだ存在しない場合、新しいフォルダーを自動的に作成しますか。=> file_existsmkdir

2) この問題を回避するために、新しく作成したフォルダにアクセス許可を与えるにはどうすればよいですか => 0777

于 2013-10-26T17:17:12.420 に答える
0
  1. いいえ、フォルダは動的に作成されません。
  2. chmod()権限を変更するために使用します。

いくつかのフォルダの存在を確認するためにも使用is_dir()できます。

于 2013-10-26T17:18:06.283 に答える