2

PDF ファイルを Web サイトにアップロードし、ファイルの名前を変更して移動するための PHP アップロード スクリプトに関するチュートリアルを 3 日間読み、実行しました。スクリプトのフォーマット方法について、一貫した答えが見つからないようです。私の読書から、このプロセスにとって次のことが重要であることがわかります。PDFアップロードの問題に対する適切な回答が見つかりませんでした。

  1. サーバー側の MIME 検証で PDF ファイルを検証することが重要です。
  2. Clamscan は、サイトをクリーンに保つために重要です。これはアップロード直後に行う必要がありますか?
  3. ファイルの種類とウイルスがないことを確認するまで、ファイルにアクセスできないようにする必要があります。私の理解では、これは、移動と名前変更を可能にする PHP の「名前変更」機能によって行うのが最善であるということです。
  4. PDF を MySql データベースにアップロードすることを検討していましたが、多くのオンライン アドバイスを読んだ後で、これは私のサイトには最適ではないかもしれないと感じています。

  5. クライアントに html フォーム経由で pdf をアップロードしてもらいます。

これが私が使用していたフォームです:

    <form action ="PHP UPLOAD.php" method="post" encrypte="multipart/form-data">
    File: <input type="file" name="file" size="30"> <input type="submit" value="upload!">
    </form>

これは、オンライン チュートリアルから始めた PHP です。

<?php

$uploaddir = "cover";
$allowed_ext = "pdf";
$max_size = "5000000";
//$max_height = "";
//$max_width = "";

$extension = pathinfo($_FILES['file'] ['name']);
$extension = $extension[extension];
$allowed_paths = explode(", ", $allowed_ext);
for($i = 0; $i < count($allowed_paths); $i++) {
if ($allowed_paths [$i] == "$extension") {
    $ok = "1";
}
}


if ($ok == "1")  {
    if($_FILES['file']['size'] > $max_size)
    {
        print "File is too big!";
        exit;
    }

// Include for images
//if ($max_width && $max_height) {
//list ($width, $height, $type, $w) =
//getimagesize($_FILES['file']['tmp_name']);
//if ($width . $max_width || $height > $max_height)
//{
//print "File height and/or width are too big!";
//exit;
//}
//}

if(is_uploaded_file($_FILES['file']['tmp_name']))
{
move_uploaded_file($_FILES['file']['tmp_name'],$uploaddir.'/'.$_FILES['file']['name']);
}
print "Your Cover Letter has been successfully uploaded!";
} else {
print "Incorrect file extension!";
}

?>

無効なファイル タイプのメッセージが返されました。

このコードを見つけました。Mime Type による検証の方が優れているようですが、完全ではないようです。

$allowedExts = array(
  "pdf", 
  "doc", 
  "docx"
); 

$allowedMimeTypes = array( 
  'application/msword',
  'text/pdf',
  'image/gif',
  'image/jpeg',
  'image/png'
);

$extension = end(explode(".", $_FILES["file"]["name"]));

if ( 20000 < $_FILES["file"]["size"]  ) {
  die( 'Please provide a smaller file [E/1].' );
}

if ( ! ( in_array($extension, $allowedExts ) ) ) {
  die( 'Please provide another file type [E/2]. );
}

if ( in_array( $_FILES["file"]["type"], $allowedMimeTypes ) ) 
{      
 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
}
else
{
die( 'Please provide another file type [E/3]. );
}

私は学ぼうとしていますが、私の問題を解決する非常に明確な道を見つけることができないようです. PDF のアップロードとこのプロセスの何が特別なのか、明確な答えを教えてもらえますか?

背景として、MAMP と Dreamweaver & Text Wrangler を使用して MAC でこれを構築しています。これを GoDAddy サイトに実装します。そのため、私が直面する問題をご存知でしたら、ご連絡いただければ幸いです。

前もって感謝します!

4

2 に答える 2

4

enctypeこのエラー メッセージは、encrypte として入力しなかったことが原因だと思います。これも確認してください。

<form action ="PHP_UPLOAD.php" method="post" enctype="multipart/form-data">
File: 
<input type="file" name="file" size="30"> 
<input type="submit" value="upload!">
</form>
于 2012-10-08T13:46:27.700 に答える