2015-05-15 88 views
-1

我是PHP的新手,試圖從目錄中選擇一個文件,然後使用該文件名來設置$filename變量,這樣我就可以處理文件(打開,循環,等等。)。但是,$filename在我選擇它之後仍爲空。從文件名設置PHP變量

<?php 
    $filename = ""; 
    if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $filename = test_input($_POST["filename"]); 
    } 

    function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
    } 
?> 

<form method="POST" action="processFile.php"> 
    <input type="file" name="filename"> 
    <input type="submit" name="submit" action="Submit" value="Submit"> 
</form> 

processFile.php:

<?php 

$filename = $_POST['filename']; 
$handle = fopen ($filename, "r"); 

$header = fgetcsv($handle, '', "\t"); // gets a row at a time, so first row 
fclose($handle); 

print "<br />"; 

$cols = $header; 

$length = count($cols); 

var_dump($cols); 

print "<br />"; 
?> 
+0

歡迎來到Stack Overflow!你的問題有點難以理解,你能澄清一下嗎?您正在使用'fgetcsv'來讀取一個文件,它應該是一個csv文件嗎?此外,第一個剪輯中的代碼的目的是什麼? – Schlaus

+0

這應該是一個文件上傳,或者你實際上是在讀取一個服務器文件嗎?閱讀[處理文件上傳](http://php.net/manual/en/features.file-upload.php) – Devon

+0

我認爲問題是獲取文件的完整路徑...展望 – sqldoug

回答

0

您需要將此代碼添加到您的形式,使文件上傳

<form method="POST" action="processFile.php" enctype="multipart/form-data"> 
    <input type="file" name="filename"> 
    <input type="submit" name="submit" action="Submit" value="Submit"> 
</form> 
0

您的形式缺少一個有效的加密類型enctype="multipart/form-data"和你使用$_POST而不是$_FILES,這是處理文件時需要的。

  • enctype="multipart/form-data"放置在窗體標籤中。
  • 更改爲$_FILES['filename']

  • $_POST['filename']所有實例從您輸入刪除action="Submit"。操作保留爲<form>而不是輸入。

資源:


其實,這修復它:$名稱= $ _FILES [ '文件名'] [」名稱']; - sqldoug

  • 如文檔/資源的鏈接中列出。
+0

@sqldoug旁註:我必須離開一段時間,但如果您有任何問題,請稍後再回來*歡呼* –

+0

print_r($ _ FILES);給出正確的文件名,但不是它的完整路徑,我認爲這是問題。要處理的文件與php文件不在同一個目錄中;它在任何Web服務器目錄之外。 – sqldoug

+0

實際上,這個修正了它:'$ name = $ _FILES ['filename'] ['name'];' – sqldoug