2017-08-04 88 views
0

我不知道爲什麼filetime給了我錯誤的日期。任何人有任何建議?Filemtime給出錯誤的輸出

for($i=0;$i<$image_count;$i++){       //Setup file names and file types 
    $temp_name = $target_dir . basename($_FILES["fileToUpload"]["name"][$i]); 
    $temp_thumb_name = $thumb_target_dir . basename($_FILES["fileToUpload"]["name"][$i]); 
    $temp_type = pathinfo($temp_name,PATHINFO_EXTENSION); 
    array_push($target_file, $temp_name);    // Create array of file names 
    array_push($target_file_thumb, $temp_thumb_name); //Create array of thumb path names 
    array_push($imageFileType, $temp_type);    //Create array of fileextensions 
    echo "<BR>was last modified: " . date ("F d Y H:i:s.", filemtime(basename($_FILES["fileToUpload"]["name"][$i]))); 
    array_push($file_creation, date ("F d Y H:i:s.", filemtime(basename($_FILES["fileToUpload"]["name"][$i])))); 
} 

輸出

was last modified: January 01 1970 01:00:00. 

錯誤日誌

PHP Warning: filemtime(): stat failed for DSC07292.jpg 
+0

使用'filetime'時刪除'basename'您需要文件的完整路徑 – cmorrissey

+0

您將文件上傳到哪裏?路徑?在你編寫target_dir的代碼中。基本名稱給你沒有路徑。看起來你上傳到一個目錄,但嘗試看basename(父文件夾)中的filemtime。總之,嘗試:'date(「F d YH:i:s。」,filemtime($ target_dir。basename($ _FILES [「fileToUpload」] [「name」] [$ i])));' – Andreas

+0

我是試圖獲取用戶上傳的原始文件的文件創建日期,而不是我在服務器上創建的文件。我也嘗試了沒有基名的代碼,並收到相同的輸出和錯誤。感謝您花時間看看。 –

回答

0

擁有的文檔上傳文件的讀取:how to handle file uploads

  1. 上傳的文件位於$_FILES["fileToUpload"]["tmp_name"][$i](請仔細閱讀它,它是tmp_名)
  2. $_FILES["fileToUpload"]["name"][$i]中文件的名稱不包含任何路徑。無用的基地名稱。
  3. 你需要上傳的文件移動到你想要的功能move_uploaded_file

一旦你固定的路徑問題的位置,我敢打賭,你會disapointed:文件創建日期是一個元數據一個文件,它由文件系統管理(如果需要的話),因此不在文件內。

這段信息在文件上傳過程中不傳輸。除非你有可能存在元信息的文件(如圖像中的exif),否則無法獲取原始文件的創建日期。順便說一句,你想要創建日期,但使用一個名爲fileMtime的函數,'M'代表修改時間...

對於其餘的安德烈亞斯解釋爲什麼日期是1970年,因爲filemtime沒有找到一個文件stat

// __DIR__ is directory of this php file, set accordingly 
$target_dir = __DIR__ . '/'; 
$thumb_target_dir = __DIR__ . '/'; 

$image_count = count($_FILES["fileToUpload"]["name"]); 
for ($i = 0; $i < $image_count; $i++) { 
    //Setup file names and file types 

    // Create the path to the location where we want to store the file 
    $temp_name = $target_dir . $_FILES["fileToUpload"]["name"][$i]; 

    // We need to move the temp file to the location we want : 
    move_uploaded_file($_FILES["fileToUpload"]["tmp_name"][$i], $temp_name); 

    $temp_thumb_name = $thumb_target_dir . $_FILES["fileToUpload"]["name"][$i]; 
    $temp_type = pathinfo($temp_name, PATHINFO_EXTENSION); 
    array_push($target_file, $temp_name);    // Create array of file names 
    array_push($target_file_thumb, $temp_thumb_name); //Create array of thumb path names 
    array_push($imageFileType, $temp_type);    //Create array of fileextensions 

    // Get the file modif time, but only of the local file. 
    $fmtime = filemtime($temp_name); 
    echo "<BR>was last modified: " . date("F d Y H:i:s.", $fmtime); 
    array_push($file_creation, date("F d Y H:i:s.", $fmtime)); 
} 
+0

優秀。感謝您的詳細回覆。這是圖像,我用exif來獲取方向。我會花更多時間看這個。 –

+0

使用以下2行修復 '$ exif = exif_read_data($ _ FILES [「fileToUpload」] [「tmp_name」] [$ i]); //讀取元數據 \t \t array_push($ file_creation,$ exif ['DateTimeOriginal']);' –

0

我認爲這個問題是在路徑試試這個:

array_push($file_creation, date ("F d Y H:i:s.", filemtime($temp_name))); 
+0

感謝您的建議。仍然是同樣的問題。錯誤日誌現在說 PHP警告:filemtime():stat失敗上傳/ 1/DSC07346.jpg在/Applications/MAMP/htdocs/upload.php在55行 但日期仍然是錯誤的值「1970年1月1日01:00:00「。 –

+0

嘗試提供文件的完整路徑到函數filemtime –

0

你得到的輸出1970年的原因一點是因爲你在一個ti mezone(現在)即1小時+與GMT相比。
發生什麼事是filemtime沒有找到該文件或其他錯誤,但最有可能的路徑錯誤。
Filemtime返回false。

日期讀取假爲0 日期看這是1970年午夜在UNIX時間0日期

你的時區增加1小時。

產量爲午夜1小時。

我敢打賭,我的左臂是一個路徑錯誤,或者該文件不存在,你嘗試filemtime。

確保您的數組是正確的,並且該文件確實存儲在basename()或webroot中。 (非常值得懷疑)。
如果它不在webroot中,則需要在filemtime()中添加如下路徑:

date ("F d Y H:i:s.", filemtime("THE PATH" . basename ($_FILES["fileToUpload"]["name"][$i]))); 

此外,路徑可能需要一個/。

編輯:
我現在看到你給其他答案的評論路徑。

試試這個:

date ("F d Y H:i:s.", filemtime($_SERVER["DOCUMENT_ROOT"] . "/uploads/1/" . basename ($_FILES["fileToUpload"]["name"][$i]))); 
+1

是的,可能路徑是錯的 –

+0

它必須是。據我所知,沒有其他理由可以這麼做。 – Andreas

+0

感謝您的輸入。很多想法和我的頭。我會嘗試一些事情,並希望能夠實現。 –