0

PHP を使用してファイルをサーバーにアップロードし、ファイルをバイナリ形式で mysql データベースに保存しようとしていますが、うまくいきません。使用しているスクリプトは次のとおりです。"$_FILES " これを取り出すと "&& $_FILES['userfile']['size'] > 0" スクリプトが実行を開始しますが、その下にある "$_FILES" を使用する変数は定義されていません。

if(isset($_POST['upload']) && $_FILES['userfile']['size'] >  0) {
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

if(!get_magic_quotes_gpc())
{
    $fileName = addslashes($fileName);
}

db_connect();
db_select();

$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

mysql_query($query) or die('Error, query failed');
db_disconnect();

echo "<br>File $fileName uploaded<br>";
}
4

6 に答える 6

3

これは 2 つのプロセスです。最初にアップロード自体、次にサーバーでの操作です。最初の検証は、ファイルがアップロードされたことを確認することです。そのために、行の後に使用できます

$fileName = $_FILES['userfile']['name'];

使用する:

if(is_uploaded_file($fileName)) {
  // Here goes all the file manipulation/storage/etc
} else {
  echo 'Error: File could not be uploaded.';
}

それを使用してみて、ファイルが実際にアップロードされた場合は再投稿してください。$_FILES にコンテンツがあるからといって、ファイルがサーバーにアップロードされたとは限りません。

于 2009-02-23T21:24:44.110 に答える
3

ファイルのアップロード ステータスを使用して、アップロードが成功したかどうかを確認することをお勧めします。

addslashesまた、MySQL クエリには関数を使用しないでください。mysql_real_escape_string代わりにを使用してください。

于 2009-02-23T15:49:40.717 に答える
2

フォームでファイルをアップロードする場合、「フォーム」タグに「enctype="multipart/form-data"」が含まれていますか?

于 2009-02-23T15:53:35.060 に答える
1

投稿されているフィールドの名前は「userfile」だと思いますか?

また、これはあなたの質問に直接関係するものではありませんが、一般的に、MySQL ではなくファイルシステムにファイルを保存することをお勧めします。ファイルシステムはバイナリ データの大きなブロックを格納するように設計されていますが、データベースはそうではありません。

于 2009-02-23T15:43:26.830 に答える
1

あなたの例から、あなたの入力名はupload. <input type="file" />PHP での結果は ではなく でソートさ$_POST$_FILESます。ドキュメントでは$_FILES['userfile']フィールドの例として を使用していますが、入力が として宣言されている<input type="file" name="upload" />場合は、単純に を使用する必要があります$_FILES['upload']

于 2009-02-23T15:53:43.110 に答える
0

make print_r( $FILES )を試して、何が問題なのかを定義してください。多分フォームはタイプを必要としませんでしたか?

于 2011-05-07T13:09:05.910 に答える