2011-05-03 73 views
3

我有uploadify問題。 在客戶端它的工作非常好 (所有功能像按鈕,進度等和文件可以上傳到客戶端) 但在主機(服務器)上,文件無法上傳。無法使用uploadify上傳文件

服務器上,另一個(按鈕,進度,上傳腳本)正在工作, 只有我想上傳的文件無法上傳。

否則我有一些進程插入到數據庫(文件的路徑),我把插入SQL查詢的腳本上傳過程中,查詢工作,但文件不能被上傳

我的腳本(upload_file。 PHP):

<?php  

    $file_id   = $_POST['file_id']; 

    if (!empty($_FILES)) 
{ 

    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';  
    $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name']; 

     $destinationFile = "files/". $_FILES['Filedata']['name'];   
     move_uploaded_file($tempFile,$targetFile); 



     //additional - query to insert the path 

     include("database_connection.php");  

     $query = "insert into file (file_id,path) values ('$file_id','$destinationFile')"; 
     $result = mysql_query($query);  

     mysql_close(); 
} ?> 

和JavaScript:

$('#file').uploadify 
({ 
    'uploader' : '/myweb/shockwaves/uploadify.swf', 
    'script'  : '/myweb/process/upload_file.php', 
    'cancelImg' : '/myweb/images/uploadify/cancel.png', 
    'folder'  : '/myweb/files', 
    'auto'  : true,  
    'buttonText' : 'Upload', 
    'scriptData' : {'file_id':'001'} 
}); 

謝謝:)

+2

定義「不工作」。你有錯誤嗎?日誌?你是否用調試器遍歷代碼? – lucifurious 2011-05-03 02:40:22

回答

3

我們需要更多的信息,但想到的可能性:

  1. 您的表單HTML不正確。
  2. 該文件太大。
  3. 文件名太長。
  4. 服務器上的文件寫入權限問題。

確保你的HTML表單有 「加密類型」

確保頁面上的HTML表單有enctype="multipart/form-data"例如

<form action="" method="POST" enctype="multipart/form-data"> 

診斷PHP錯誤/文件寫入錯誤

如果它是一個文件/權限問題,你也許能發現一個PHP的錯誤,所以請嘗試啓用如下錯誤頁面上的報告:

<?php 
    error_reporting(E_ALL); 
    ini_set("display_errors", 1); 
?> 

變化的file_id被自動生成

英語新還應該改變你的數據庫,以便它產生你的file_id(即自動遞增主鍵/標識),而不是傳入。如果您沒有自動生成,則可能會出現重複file_id條目(或者如果file_id列是主鍵是)。

想必你也是使用'scriptData' : {'file_id':'001'}因爲這將意味着你的每一條記錄插入001 file_id實際上。然而,即使是客戶端大小的這一代,也存在以下風險:a)人們挑選自己的file_id並破壞數據; b)JS禁用時發生錯誤(uploadify不起作用,但文件可能仍然有效); c)重複file_id代。

你的樣品是容易受到SQL注入

您當前的樣品是特別容易受到SQL注入,因爲你不逃避你的參數。你可能會認爲這是因爲「它沒關係,它是一個內部應用程序,所以沒有安全風險」,但即使意外的SQL注入也會導致問題。如果這是一個面向公衆的網站,您剛剛暴露了您的數據庫。我假設這是一個簡化的示例,但即使如此,發佈未轉義的SQL(至少沒有評論)也是不明智的,因爲它只會導致其他經驗較少的開發人員將其複製/粘貼到某個應用程序中。

+1

是的它,服務器上的文件寫入權限問題是問題:) 現在它的工作非常好,thx – bungdito 2011-05-03 04:13:21

+1

實際上我生成在JavaScript上的file_id,並不總是每個記錄001。上面的001僅僅是一個例子,非常感謝。 :) – bungdito 2011-05-03 04:58:38

+1

@bungdito - 但如果file_id只是001/002/003/004等,爲什麼不讓數據庫產生這個,所以你不會冒險上傳兩個客戶端上傳相同的file_id? – 2011-05-03 05:20:40