2

いくつかのスクリプトを使用して、開発マシンにファイルのアップロードを開始しました。問題は、この操作の予想される容易さにもかかわらず、画像をアップロードしようとすると、Apacheがタイムアウトするように見えることです。アップロードはに設定されOntmpディレクトリはに設定されphp.iniます。

gifGoogleからメインの画像をアップロードしてみました8.36KB。それは問題なく、PHPのアップロード機能の制限内に十分収まっているはずです。

これがスクリプトのコピーです。簡単な修正があるはずです。リクエストに応じて、チルダを実際のディレクトリに変更しました。

<?php 

if (!isset($_GET['upload'])) { ?>
  <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
  <input type="file" name="file" class="form">
  <input name="submit" type="submit">
  </form>
<? } else  if (isset($_GET['upload']) && $_GET['upload'] == 'true') {
  $url = $_FILES['file']['name'];
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg");
    if ($move) {
        echo "Success!";
    } else { 
        echo "Err..."
    } 
} ?>

ありがとう、ダン

編集:

いくつかの答えの助けを借りて、私はそれを修正しました。そのうちの1つにマークを付けます。

ここでいくつかのことがこの動作を引き起こしていました。

  1. ディレクトリに対するアクセス許可は、ユーザーimagesがディレクトリにアクセスできるように設定されていませんでした。と同様に、それを修正したよう_wwwです。chmod -R 777 imagessudo chown _www images

  2. フォームの出力により、PHPスクリプト自体が破損している可能性があります。提案されたようにECHO <<< ...END、私は助けたと思います。

4

4 に答える 4

3

たとえば、何らかの方法で完全に失敗するのではなく、Apacheがタイムアウトしているとあなたが信じる理由は何ですか?私に飛びついたのは、ファイルをに移動しようとしているということです。~/file.jpgこれはほぼ確実に機能しません。~は、PHPの奇妙なあいまいな機能のいずれかがこのようなコンテキストで処理されていない限り、通常はシェル内でのみ意味を持つ構造です。とにかく、実際のディレクトリを置いてみてください。

于 2009-05-30T04:59:27.970 に答える
2

問題がファイルサイズである場合は、php.iniファイルに次の行を追加すると機能するはずです。

upload_max_filesize = 500M ;
post_max_size = 500M ;
于 2009-05-30T04:58:44.770 に答える
2

PHP のデフォルトでは、ページのタイムアウトは 30 秒です。したがって、アップロードに 30 秒以上かかると失敗します。php.ini でタイムアウトを設定するか、ファイルの先頭に次のコードを追加します。

ini_set(max_execution_time, 90);

2 番目の引数は、ページがタイムアウトするまでの時間を秒単位で表します。適切と思われる時間に設定してください。また、'~' は一般にシェル内でのみ意味を持つ構成体であるという点で、chaos は正しいです。

Re: http://ca2.php.net/manual/en/ini.list.php

編集:問題は、条件の途中でタグを再度開いたことです。コードを試すと、構文エラーが発生します。Web フォームを表示できたのは奇妙です。これは固定コードです(私にとってはうまくいきます)。

<?php 
if (!isset($_GET['upload'])) { 
ECHO <<<END
  <form method="post" action="index.php?upload=true" enctype="multipart/form-data"> 
  <input type="file" name="file" class="form">
  <input name="submit" type="submit">
  </form>
END;
 } else  if (isset($_GET['upload']) && $_GET['upload'] == 'true') {
    $url = $_FILES['file']['name'];
    $move = move_uploaded_file($_FILES['file']['tmp_name'], "/Users/<username>/Sites/file.jpg");
    if ($move) {
        echo "Success!";
    } else { 
        echo "Err...";
    } 
} ?>
于 2009-05-30T05:55:12.720 に答える
2

これはおそらく、ファイルのサイズの問題、および/または Apache ユーザーと指定されたディレクトリ間の権限の問題です。たとえば、Apache インスタンスがユーザー (nobody) で実行されていないことを確認します。

カオスへのコメント: チルダ (~) は問題を引き起こす可能性がありますが、おそらくタイムアウトは発生しません。警告が表示されます。システムで動作する場合でも、Apache ユーザー (例: www) が有効なホーム ディレクトリ セットを持っていない場合、予期しないディレクトリにファイルが保存されるか、何らかの問題が発生する可能性があります。

于 2009-05-30T05:55:46.680 に答える