0

サイトを共有ホスティングから VPS に移行中です。VPS でテストしたところ、突然、Web フォームからファイルをアップロードできなくなったことに気付きました。

エラー: Warning: move_uploaded_file(/uploads/logoklein.jpg): failed to open stream: No such file or directory in /var/www/vhosts/denkproducties.nl/httpdocs/denkproducties/upload.php on line 26 Warning: move_uploaded_file(): Unable to move '/tmp/php01nhmx' to '/uploads/logoklein.jpg' in /var/www/vhosts/denkproducties.nl/httpdocs/denkproducties/upload.php on line 26

SO にはこれに関する質問がたくさんありますが、ほとんどの場合、パーミッションを正しく設定する必要があります。TMP とアップロード ディレクトリの両方を 0777 (身震い) に chmod しましたが、役に立ちませんでした。0777 を実行するのは賢明なことではありませんが、これらのフォルダーのアクセス許可の問題ではないことを確認したかったのです。

変更されたのは VPS だけなので、問題はサーバーにあるに違いないと考えました。Web サーバーが「nobody」として実行されている可能性があると考えたため、tmp フォルダーにアクセスできませんでした。私は走った:

ps aux | grpe httpd

それは私を示しています:

root   27371   0.0  2.3   340860   24726  ?   SNs   12:57   0:00   /usr/sbin/httpd
apache 27372   0.0  0.9   240994    9820 ?    SN    12:57   0:00   /usr/sbin/httpd
apache 27373   0.0  1.6   341671   16700 ?    SN    12:57   0:00   /usr/sbin/httpd
apache 27374   0.0  1.6   341671   16700 ?    SN    12:57   0:00   /usr/sbin/httpd
apache 27375   0.0  1.6   341671   16700 ?    SN    12:57   0:00   /usr/sbin/httpd
apache 27376   0.0  1.6   341671   16700 ?    SN    12:57   0:00   /usr/sbin/httpd
apache 27377   0.0  1.6   341671   16700 ?    SN    12:57   0:00   /usr/sbin/httpd
apache 27378   0.0  1.6   341671   16700 ?    SN    12:57   0:00   /usr/sbin/httpd
root   27817   0.0  0.0   103244     824 tty1 S+    13:40   0:00   grep httpd

ちなみに、私のサーバーはfCGIを実行しています。

完全を期すために、Web フォームを使用した小さなアップロード スクリプトを作成しました。

$allowed_filetypes = array('.jpg','.gif','.bmp','.png'); // これらは、検証に合格するファイルの種類になります。
   $max_filesize = 1024000; // BYTES 単位の最大ファイルサイズ (現在は 1MB)。
   $upload_path = '/アップロード/'; // ファイルがアップロードされる場所 (現在は「アップロード」ディレクトリ)。


   $filename = $_FILES['userfile']['name']; // ファイルの名前を取得します (ファイル拡張子を含む)。
   $ext = substr($filename, strpos($filename,'.'), strlen($filename)-1); // ファイル名から拡張子を取得します。

   // ファイルタイプが許可されているかどうかを確認し、許可されていない場合は DIE を確認し、ユーザーに通知します。
   if(!in_array($ext,$allowed_filetypes))
      die('アップロードしようとしたファイルは許可されていません。');

   // ここでファイルサイズをチェックし、大きすぎる場合は DIE してユーザーに通知します。
   if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
      die('アップロードしようとしたファイルが大きすぎます。');

   // 指定されたパスにアップロードできるかどうかを確認し、そうでない場合は DIE にしてユーザーに通知します。
   //if(!is_writable($upload_path))
   // die('You cannot upload to '. $upload_path .'the specified directory, please chmod it to 777.');

   // 指定したパスにファイルをアップロードします。
   if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename)){
         echo 'ファイルのアップロードに成功しました。ここでファイルを表示してください'; // 出来た。
     } そうしないと {
         echo 'ファイルのアップロード中にエラーが発生しました。もう一度やり直してください。// 失敗しました :(.
 }

ここで何が欠けていますか?

4

1 に答える 1

1

コメントのルイス・フッペンバウアーは、私の同様の問題に対して正しい答えを持っていました。

相対パスを使用しても機能しませんでした。完全なパスが必要でした。/uploads/ をホストの完全なディレクトリに変更してみてください。例: D:\InetPub\Vhosts\website.com\website2.com\uploads\

于 2014-02-27T02:40:59.500 に答える