首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDF Uploader脚本

PDF Uploader脚本
EN

Stack Overflow用户
提问于 2012-10-08 13:41:16
回答 2查看 9.7K关注 0票数 2

我花了3天阅读和做有关PHP上传脚本的教程上传PDF文件到一个网站,重命名和移动的文件。对于如何格式化脚本,我似乎找不到一致的答案。从我的阅读来看,以下内容对这一过程非常重要。我还没有找到一个好的工作答案PDF上传问题。

  1. 使用服务器端mime验证验证PDF文件非常重要。
  2. Clamscan对于保持站点的清洁非常重要。这应该在上传后立即完成吗?
  3. 在通过类型和无病毒验证文件之前,不应该访问它们。我的理解是,这最好通过PHP的" rename“函数来实现,它允许移动和重命名。
  4. 我曾经考虑过将PDF上传到我的MySql数据库中,但是在阅读了很多在线建议之后,我现在觉得这对我的站点来说可能不是最好的。
  5. 我将让客户通过html表单上传pdfs。

下面是我使用的表单:

代码语言:javascript
复制
    <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。

代码语言:javascript
复制
<?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,但似乎是不完整的。

代码语言:javascript
复制
$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站点上实现这一点。所以,如果你知道我将要面对的问题,我会很感激你提醒我。

提前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-08 13:46:27

我认为错误信息是因为您错过了键入的enctype加密,请也检查一下。

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2017-10-02 00:00:38

嗨,第二个代码,通过Mime进行验证,但似乎不是这样完成工程。

代码语言:javascript
复制
$allowedExts = array(
  "pdf", 
  "doc", 
  "docx"
); 

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

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

if ( 9000000 < $_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].' );
}

我使用$nameexploded来避免:注意:在第16行的filepath\test.php中,只应该通过引用传递变量。

这对我很有用。希望能帮助别人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12782980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档