2015-04-05 103 views
-2

我試圖在php中上傳csv文件。我也希望它能夠接受任何類型的文件。無法在php中上傳csv文件

這是我正在使用的代碼,但是,它總是輸入「無法複製文件!」條件。

HTML代碼

<html> 
<head> 
<title>File Uploading Form</title> 
</head> 
<body> 
<h3>File Upload:</h3> 
Select a file to upload: <br /> 
<form action="upload.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="file" size="50" /> 
<br /> 
<input type="submit" value="Upload File" /> 
</form> 
</body> 
</html> 

PHP代碼

<?php 
if($_FILES['file']['name'] != "") 
{ 
    copy($_FILES['file']['name'], "/var/www/html/uploads") or 
      die("Could not copy file!"); 
} 
else 
{ 
    die("No file specified!"); 
} 
?> 
<html> 
<head> 
<title>Uploading Complete</title> 
</head> 
<body> 
<h2>Uploaded File Info:</h2> 
<ul> 
<li>Sent file: <?php echo $_FILES['file']['name']; ?> 
<li>File size: <?php echo $_FILES['file']['size']; ?> bytes 
<li>File type: <?php echo $_FILES['file']['type']; ?> 
</ul> 
</body> 
</html> 

我已經檢查了上傳文件夾和HTML,以及PHP文件的許可777的,所以他們應該能夠上傳這些文件

編輯 我已經從php文件中刪除了很多代碼,並試圖mak e從文件系統上傳(複製)硬編碼文件路徑。

我觀察到的是,如果我只是從命令行運行php upload.php,它就可以將文件從「下載」上載到桌面上。然而,同樣的upload.php,如果從我的一臺服務器上的瀏覽器和index.html運行,它只是說「無法複製文件!」。在另一臺服務器上,它下載upload.php文件。基本上,從命令行運行相同的腳本。從瀏覽器不起作用。

(我沒有看到瀏覽器控制檯上的錯誤信息等)

的index.html

<html> 
<head> 
<title>File Uploading Form</title> 
</head> 
<body> 
<h3>File Upload:</h3> 
Select a file to upload: <br /> 
<form action="upload.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="file" size="50" /> 
<br /> 
<input type="submit" value="Upload File" /> 
</form> 
</body> 
</html> 

upload.php的

<?php 
$a = 2; 
$b = 1; 

if($a > $b) 
{ 
copy("/home/PepperBoy/Downloads/myfile.csv", "/home/PepperBoy/Desktop/myfile.csv") or die("Could not copy file!"); 
} 
else 
{ 
    die("No file specified!"); 
} 
?> 
<html> 
<head> 
<title>Uploading Complete</title> 
</head> 
<body> 
<h2>Uploaded File Info:</h2> 
<ul> 
<li>Sent file: <?php echo $_FILES['file']['name']; ?> 
<li>File size: <?php echo $_FILES['file']['size']; ?> bytes 
<li>File type: <?php echo $_FILES['file']['type']; ?> 
</ul> 
</body> 
</html> 
+1

我不會浪費時間解釋這一點。看看[處理文件上傳](http://php.net/manual/en/features.file-upload.php)上的PHP部分 - 你需要的一切都在那裏。 – 2015-04-05 09:52:14

回答

0

name值在$_FILES數組中不包含文件的路徑。改爲使用tmp_name。您還需要爲複製的文件提供一個名稱,而不僅僅是目標目錄。另外移動的文件,而不是複製或你最終會弄亂tmp目錄

move_uploaded_file($_FILES['file']['tmp_name'], "/var/www/html/uploads/". $_FILES['file']['name']) 
or die("Could not copy file!"); 
+0

謝謝。但我試過了,仍然無法上傳文件。我從/ var/www/html/nameofproject運行。我也嘗試註釋掉複製文件的行,並且只是echo了($ _ FILES ['file'] ['tmp_name']);;我得到了打印爲/ tmp/php03eblp的文件的名稱,這意味着複製不起作用? – PepperBoy 2015-04-05 17:39:48

+0

已更新我的回答 – 2015-04-05 18:29:53

+0

noo :(not yet。感謝您的幫助,我真的很感謝。 但我試過做一個簡單的exec(「ls> outputfile」),我也無法執行此操作。它執行(「sudo ls>輸出文件」)我得到的輸出,儘管我必須執行我的PHP腳本作爲sudo myscript.php儘管它有777權限。奇怪! 有沒有辦法執行復制行你在代碼中以超級用戶的身份顯示的代碼?這可以解決我的問題。 – PepperBoy 2015-04-05 18:56:00

0

與你同一行代碼替換此。

copy($_FILES['file']['tmp_name'], "/var/www/html/uploads") or die("Could not copy file!"); 
+0

謝謝艾菲。但是,我仍然不明白。我得到相同的輸出,「無法複製文件!」 我也修改了從/ var/www/html/uploads到本地文件夾的路徑並嘗試過,以排除它是權限問題的可能性,但沒有我無法上傳文件。 – PepperBoy 2015-04-05 17:29:17

+0

就像我在下面告訴Mike一樣,我也註釋掉了代碼的複製行,並且只是做了echo($ _ FILES ['file'] ['tmp_name']);我得到了打印爲/ tmp/php03eblp文件的名稱,並且還打印了PHP代碼的Uploaded File Info部分,這意味着該副本不起作用? – PepperBoy 2015-04-05 17:41:38

+0

呃試試下面的命令。這是我在我的項目中使用的。 $ file = $ target_path。基本名($ _ FILES [ '文件'] [ '名']);如果(move_uploaded_file($ _ FILES ['file'] ['tmp_name'],$ file)){chmod(basename($ _ FILES ['file'] ['name']),0777);} – Iffi 2015-04-06 04:21:20