2015-04-05 116 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