2012-08-15 40 views
0

我無法真正閱讀PHP,但我試圖通過php在我的頁面上傳一個csv文件,並得到以下錯誤。我知道有很多討論這個問題的線索,但我不太明白他們的意思。如果有人能向我解釋發生了什麼並提供修復,請尋找答案。「只能通過引用傳遞變量」錯誤

嚴格標準:只有變量應參考 在C下通過:\ XAMPP \ htdocs中\搜索\ PHP \裝載機\ csvFileUploader1.php上 線
失敗要上傳的文件> > >錯誤代碼:

這裏的PHP

<?php 
// using upload at click from http://code.google.com/p/upload-at-click/ 
// FileData is the name for the input file 

$file_result = ""; 
$file = $_FILES['Filedata']; 

$allowedExtensions = array("csv", "txt"); 
$extension = end(explode(".", $file["name"])); 


function isAllowedExtension($fileName) { 
    global $allowedExtensions; 
    return in_array(end(explode(".", $fileName)), $allowedExtensions); 
} 

if($file["error"] > 0){ 
    echo "failure to upload the file >>> ". "Error code: ".$file["error"]."<br>"; 
}else{ 
    //echo " >>> CURRENT DIR: ".getcwd() . "\n"; 
    $workDir = getcwd(); 

    $dir = substr($workDir, 0, -10); 
    $path = $file["name"]; 
    $newFileLoc = $dir.$path; 

    $file_result.= 
    "<br>  Upload: " . $file["name"] . "<br>" . 
    "  Type: " . $file["type"] . "<br>" . 
    "  Size: " . $file["size"] . "<br>" . 
    "  file uploaded to: ".$newFileLoc."<br>"; 

    // txt - text/plain 
    // rtf - application/msword 
    // dat/obj - application/octet-stream 
    // csv - application/vnd.ms-excel 
    // maximum 200 MB file - 200,000,000 k 

    if ( ($file["type"] == "application/vnd.ms-excel" || $file["type"] == "text/plain") 
      && isAllowedExtension($file["name"]) 
      && ($file["size"] < 200000000) 
     ) 
     { 
      move_uploaded_file($file["tmp_name"], $newFileLoc); 
      //echo $file_result.=" >>> File uploaded successfull!!"; 
      echo "|".$path;//"filePath : " . $newFileLoc; 

     }else{ 
      echo " >>> NOT a file valid: ". isAllowedExtension($file["name"]); 
     }  
} 


?> 
+0

[end()'](http://php.net/manual/en/function.end.php)的文檔講述了'數組是通過引用傳遞的,因爲它被功能。這意味着您必須將它傳遞給一個實變量,而不是返回數組的函數,因爲只有實際變量可以通過引用傳遞。 – kapa 2012-08-15 22:12:20

+0

在使用相同的PHP文件之前,我已經能夠將其他.csv文件上傳到我的頁面中,怎麼樣? – user1518600 2012-08-15 22:18:52

+0

這是一個很好的問題。另外,爲了獲得文件的擴展名,你可以簡單地使用'$ extension = pathinfo($ file [「name」],PATHINFO_EXTENSION);'。更清潔,沒有涉及的技巧。 – kapa 2012-08-15 22:22:05

回答

4

您不能將函數的返回值傳遞給end()

讓它:

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

你將不得不與其他PHP函數相同的問題。例如empty(someFunction())不起作用。

+0

好的我改爲那,但現在得到一個新的錯誤「 - CSV文件加載:上傳文件失敗> > >錯誤代碼:1
」 – user1518600 2012-08-15 22:15:16

+0

錯誤代碼在這裏解釋:http://php.net/manual/en/ features.file-upload.errors.php – Tchoupi 2012-08-15 22:17:50

+0

請注意,在PHP 5.5中,你應該能夠將變量以外的東西放在空的內部。應該很有用!如果他們做了類似的結束/重置,那將是非常棒的 – jleck 2012-08-15 23:00:13

相關問題