2012-03-13 261 views
-1

我需要一些东西的帮助... 我已经在互联网上搜索了使用php脚本上传PDF文件的可能性...... 我尝试了在此论坛中给出的所有建议,没有工作... 请任何人尽快帮助!PHP/PDF上传

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Uploaded</title> 
</head> 

<body> 
<?php 
//ini_set("upload_max_filesize", 10000000); 
$uploaddir = './uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 
//$allowed_ext = "pdf"; 
//$max_size = "9000000000000000000000"; 
define('MAX_FILE_SIZE', 0); 
echo "<p>"; 
if((($_FILES["userfile"]["type"] == "image/gif") 
    || ($_FILES["userfile"]["type"] == "image/jpeg") 
    || ($_FILES["userfile"]["type"] == "image/png") 
    || ($_FILES["userfile"]["type"] == "image/jpg") 
    || ($_FILES["userfile"]["type"] == "application/msword") 
    || ($_FILES["userfile"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
    || ($_FILES["userfile"]["type"] == "text/plain") 
    || ($_FILES["userfile"]["type"] == "application/wordperfect6.0") 
    || ($_FILES["userfile"]["type"] == "application/pdf")) 
    && ($_FILES["userfile"]["size"] < 10000000)) 
    { 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
}  else { 
    echo "Upload failed"; 
} 
    } 
echo "</p>"; 
echo '<pre>'; 
echo 'Here is some more debugging info:'; 
print_r($_FILES); 
print "</pre>"; 
?> 
</body> 
</html> 
+0

你想做什么?你甚至知道你在做什么? – 2012-03-13 14:31:18

+0

因此,上传的PDF文件与您使用的MIME类型('application/pdf')不匹配的问题是什么? – 2012-03-13 14:33:51

+0

这里有很多事情可能会出错。你应该做一些调试以找出它失败的地方。给你的第一个if语句加一个'echo'1';'或者其他东西,给你的第二个if语句加一个'echo'2';'给你的else语句加一个'echo'3';'。然后,你可以找出它正在采取什么样的路径来查看你的失败在哪里。 – Travesty3 2012-03-13 14:37:23

回答

0

尝试在else语句中打印识别您的文件的类型,而不是简单地打印“上传失败”。

echo ($_FILES["userfile"]["type"]); 

也许tyope识别不属于if中指定的类型。

+0

pdf文件不匹配(应用程序/ pdf) – Paso 2012-03-14 06:22:06

+0

我如何seeif我上传的文件已经存在并重命名它? – Paso 2012-03-14 09:42:38

+0

pdf文件不匹配(应用程序/ pdf):通过在if语句中添加新条件来修复它:打印用echo识别的类型($ _ FILES [“userfile”] [“type”])并将其插入到新的if与另一个||的声明条件。检查一个文件已经存在使用PHP函数存在:http://php.net/manual/en/function.file-exists.php。例如,在move_uploaded_file之前执行如下操作:if(file_exists($ uploadfile))rename else move_upload_file – 2012-03-14 13:13:12

0

我已经完成了我目前正在进行的项目。这是我使用的上传代码。

require_once $_SERVER['DOCUMENT_ROOT'] . 'upload.php'; 

// Initialize file path 
define ('UPLOAD_PATH', $_SERVER['DOCUMENT_ROOT'] . pdfFolder/"); 

// list of valid extensions, ex. array("jpeg", "xml", "bmp") 
$allowedExtensions = array("pdf", "xls"); 

// max file size in bytes 
$sizeLimit = 10 * 1024 * 1024; 

$uploader = new qqFileUploader($allowedExtensions, $sizeLimit); 

$result = $uploader->handleUpload(UPLOAD_PATH, false); 

if(sizeof($result['error']) == 0){ 
    // do what you want on success 
} 
else{ 
    echo "Error - " . $result['error']; 
} 

这里是uploaded.php文件:

<?php 

/** 
* Handle file uploads via XMLHttpRequest 
*/ 
class qqUploadedFileXhr { 
    /** 
    * Save the file to the specified path 
    * @return boolean TRUE on success 
    */ 
    function save($path) {  
     $input = fopen("php://input", "r"); 
     $temp = tmpfile(); 
//  $temp = fopen("php://temp", "wb"); 
     $realSize = stream_copy_to_stream($input, $temp); 
     fclose($input); 

     if ($realSize != $this->getSize()){    
      return false; 
     } 

     $target = fopen($path, "w");   
     fseek($temp, 0, SEEK_SET); 
     stream_copy_to_stream($temp, $target); 
     fclose($target); 

     return true; 
    } 
    function getName() { 
     return $_GET['qqfile']; 
    } 
    function getSize() { 
     if (isset($_SERVER["CONTENT_LENGTH"])){ 
      return (int)$_SERVER["CONTENT_LENGTH"];    
     } else { 
      throw new Exception('Getting content length is not supported.'); 
     }  
    } 
} 

/** 
* Handle file uploads via regular form post (uses the $_FILES array) 
*/ 
class qqUploadedFileForm { 
    /** 
    * Save the file to the specified path 
    * @return boolean TRUE on success 
    */ 
    function save($path) { 
     if(!move_uploaded_file($_FILES['file']['tmp_name'], $path)){ 
      return false; 
     } 
     return true; 
    } 
    function getName() { 
     return $_FILES['file']['name']; 
    } 
    function getSize() { 
     return $_FILES['file']['size']; 
    } 
} 

class qqFileUploader { 
    private $allowedExtensions = array(); 
    private $sizeLimit = 10485760; 
    private $file; 

    function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){   
     $allowedExtensions = array_map("strtolower", $allowedExtensions); 

     $this->allowedExtensions = $allowedExtensions;   
     $this->sizeLimit = $sizeLimit; 

     $this->checkServerSettings();  

     if (isset($_GET['file'])) { 
      $this->file = new qqUploadedFileXhr(); 
     } elseif (isset($_FILES['file'])) { 
      $this->file = new qqUploadedFileForm(); 
     } else { 
      $this->file = false; 
     } 
    } 

    private function checkServerSettings(){   
     $postSize = $this->toBytes(ini_get('post_max_size')); 
     $uploadSize = $this->toBytes(ini_get('upload_max_filesize'));   

     if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){ 
      $size = max(1, $this->sizeLimit/1024/1024) . 'M';    
      die("{'error':'increase post_max_size and upload_max_filesize to $size'}");  
     }   
    } 

    private function toBytes($str){ 
     $val = trim($str); 
     $last = strtolower($str[strlen($str)-1]); 
     switch($last) { 
      case 'g': $val *= 1024; 
      case 'm': $val *= 1024; 
      case 'k': $val *= 1024;   
     } 
     return $val; 
    } 

    /** 
    * Returns array('success'=>true) or array('error'=>'error message') 
    */ 
    function handleUpload($uploadDirectory, $resample, $replaceOldFile = TRUE){ 
     if (!is_writable($uploadDirectory)){ 
      if (!mkdir($uploadDirectory, 0777, true)) { 
       die('Failed to create folders...'); 
       return array('error' => "Server error. Upload directory isn't writable." . $uploadDirectory); 
      } 
     } 

     if (!$this->file){ 
      return array('error' => 'No files were uploaded.'); 
     } 

     $size = $this->file->getSize(); 

     if ($size == 0) { 
      return array('error' => 'File is empty'); 
     } 

     if ($size > $this->sizeLimit) { 
      return array('error' => 'File is too large'); 
     } 

     $pathinfo = pathinfo($this->file->getName()); 
     $filename = $pathinfo['filename']; 
     //$filename = md5(uniqid()); 
     $ext = $pathinfo['extension']; 

     if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){ 
      $these = implode(', ', $this->allowedExtensions); 
      return array('error' => 'File has an invalid extension, it should be one of '. $these . '.'); 
     } 

     if(!$replaceOldFile){ 
      /// don't overwrite previous files that were uploaded 
      while (file_exists($uploadDirectory . $filename . '.' . $ext)) { 
       $filename .= rand(10, 99); 
      } 
     } 

     if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){ 
      return true; 
     } else { 
      return array('error'=> 'Could not save uploaded file.' . 
       'The upload was cancelled, or server error encountered.'); 
     } 
    }  
} 

希望这有助于!

+0

感谢它的成功帮助 – Paso 2012-03-14 07:07:45