この回答では、Apache を使用していると仮定します。
まず、アップロードされているファイルは大丈夫ですか?問題が発生する可能性のある理由の 1 つは、tmp ディレクトリが Web サーバーによって書き込み可能ではないか、読み取り可能ではないことです。これで問題ないと仮定すると、move_uploaded_file は正常に動作するはずです。
DOCUMENT_ROOT の横にフォルダーを作成します。これを「filestore」と呼びましょう。www-dataまたはapacheを実行しているユーザーが書き込み可能であることを確認してください。これで、ファイルをそのフォルダーに移動できるはずです。通常、それらは www-data:www-data によって所有されることに注意してください。または、サーバーが実行するように設定されているユーザーとグループに注意してください。「filestore」フォルダーを DOCUMENT_ROOT フォルダーの隣に置いた理由は、Web サーバーが DOCUMENT_ROOT までのファイル パスを確実に読み取れるようにするためです。そうしないと、パスの途中までのフォルダーが読み取り不能になる危険性があり、それによってあなたは死んでしまいます。たとえば、ターゲット フォルダとして /usr/local/media があり、/usr/local が Web サーバーによって読み取り可能 (および実行可能) でない場合、乾杯します。
これがすべて機能し、絶対にメディアを別の場所に置く必要がある場合は、「filestore」フォルダーへのパス全体が Web サーバーによって読み取り/実行可能である限り、どこにでも置くことができます。パス内の各ディレクトリを確認してください。
これらのアップロードされたファイルが Web 経由で他のユーザーによってダウンロードされている場合、ファイルを読み取るのは常に Web サーバーのユーザーになるため、「filestore」フォルダーには 700 の権限のみが必要です。他のユーザーがアクセスする必要がある場合は、通常、別のユーザーとして実行されている他のソフトウェアがそれらを使用する必要があるため、グループ メンバーがディレクトリを読み取り (および実行) できるように、アクセス許可を 750 にする必要がある場合があります。また、その別のユーザーを www-data グループに追加する必要があります。
ダウンロードの場合、いくつかの認証チェックを行った後にファイルをブラウザーにダンプする簡単なスクリプトを作成する必要があります。そうすれば、最初に認証を行わずに http 経由でメディアにアクセスすることを回避できます。これにより、サービスが違法なファイルにとって魅力的な場所になる可能性があります (ここでは、著作権侵害が最も懸念されていません)。