24564
便利そうなファイルアップローダーを見つけたので、nginx + php
環境でさっそく試してみたのですがforbiddenエラーが発生してしまい困っております。

↓はパックマン.jpgという画像をアップロードさせようとして失敗した(forbidden)画面です。

[![画像の説明をここに入力](https://i.stack.imgur.com/vJvAs.jpg)](https://i.stack.imgur.com/vJvAs.jpg)

仕様した現物は↓になります。  
<https://github.com/blueimp/jQuery-File-Upload>

導入方法の通りに、落としてきたソースをドキュメントルートに置いているだけとなります。  
アップロードされた画像は server/php/files 配下に保存されるようなのですが・・・  
ここが原因かと思い、777の権限を与えましたがダメでした。

ログを見ようにも php-fpm のログには何ものってきません。

他にどこを注意したらよろしいかアドバイス頂けませんでしょうか？  
よろしくお願い致します。

ちなみに今回作成したアップローダは下記URLにあります。  
お好きにアップロードしてみてください。（forbiddenで全てはじかれてしまいますが・・・）  
<http://45.62.240.53/>
CC BY-SA 3.0
2016-05-02T08:07:15.017
24511
2016-05-04T13:19:53.483
14384
question
php jquery
ファイルアップローダーのエラー内容について
あてずっぽうですが `Forbiden`で検索すると、次のコードで `download_via_php` というオプションが 1 .. 3 以外の場合は
Forbidden になる記述がありました。

```

        switch ($this->options['download_via_php']) {
            case 1:
                $redirect_header = null;
                break;
            case 2:
                $redirect_header = 'X-Sendfile';
                break;
            case 3:
                $redirect_header = 'X-Accel-Redirect';
                break;
            default:
                return $this->header('HTTP/1.1 403 Forbidden');
        }
    
```

どうやって設定するのが正解かわかりませんが コメントに↓のように書かれていたので 変数書き換えてみると何か変化が有るかもしれません。

```

            // Enable to provide file downloads via GET requests to the PHP script:
            //     1. Set to 1 to download files via readfile method through PHP
            //     2. Set to 2 to send a X-Sendfile header for lighttpd/Apache
            //     3. Set to 3 to send a X-Accel-Redirect header for nginx
            // If set to 2 or 3, adjust the upload_url option to the base path of
            // the redirect parameter, e.g. '/files/'.
            'download_via_php' => false,
    
```

[https://github.com/blueimp/jQuery-File-
Upload/search?utf8=%E2%9C%93&q=download_via_php](https://github.com/blueimp/jQuery-
File-Upload/search?utf8=%E2%9C%93&q=download_via_php)
CC BY-SA 3.0
2016-05-02T09:48:29.457
24514
2016-05-02T09:48:29.457
5008
24511
answer
`js/main.js` に以下のような記述があります。

```

    // Initialize the jQuery File Upload widget:
    $('#fileupload').fileupload({
        // Uncomment the following to send cross-domain cookies:
        //xhrFields: {withCredentials: true},
        //url: 'server/php/'
        url: 'src/'
    });
    
```

このプラグインはここで指定したURLに対して画像をPOSTします。デフォルト値は `server/php/`
ですが、実際にはインデックスファイルの指定を通して `server/php/index.php` が呼び出されることを期待しています。ところが
`server/php/` にアクセスするとファイル一覧が表示されますから、インデックスファイルとして `index.php`
が指定されていないのではないでしょうか？

現在ではForbiddenではなくNotAllowedになっていますが、これは前述の設定が `src/` に変更されているからでしょう。 `src/`
にアクセスすると静的なページが表示されますが、静的なHTMLに対してPOSTすることはできません。

indexディレクティブで `index.php` を指定したうえで前述の設定値を `server/php/` に戻すか、あるいは
`server/php/index.php` とファイル名まで指定するとよいでしょう。

なおアップロードはできても画像リサイズに失敗するようです。imagickもしくはgdを使うようなので、PHPでそれらの拡張モジュールが使えるかどうか確認し、なければインストール等する必要があります。

余談ですが、403
Forbiddenはそのページそのものへアクセスする権限がない、という意味合いですから、PHPからファイルを書きこめない場合には別のエラー（500とか）になりそうです。
CC BY-SA 3.0
2016-05-04T13:19:53.483
24564
2016-05-04T13:19:53.483
8000
24511
answer