我正在尝试使用PHP制作一个简单的文件上传表单。这是我的代码:
<?php
$uploads_dir = '/uploads';
if(isset($_FILES['thefile'])){
$errors= array();
$file_name = $_FILES['thefile']['name'];
$file_size =$_FILES['thefile']['size'];
$file_tmp =$_FILES['thefile']['tmp_name'];
$file_type=$_FILES['thefile']['type'];
$tmp_name = $_FILES['thefile']["tmp_name"];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($tmp_name, "$uploads_dir/$file_name");
echo "Success";
}
else{
print_r($errors);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Simple File Upload</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="thefile" />
<input type="submit"/>
</form>
</body>
</html>
我意识到我并不限制文件类型,但是一旦我上传了简单的.jpg或.zip文件,我就会担心这一点。使用上面的代码,我转到位于
的本地服务器上的页面C:\wamp\www\simpleupload (this contains index.php, the file posted above)
当我选择一个小图片文件并点击提交时,我发现了以下错误:
警告:move_uploaded_file(/uploads/session_timeout_formatting_bug.png):无法打开流:第18行的C:\ wamp \ www \ project_fileshare \ index.php中没有此类文件或目录
和
警告:move_uploaded_file():无法移动&#39; C:\ wamp \ tmp \ phpEFDE.tmp&#39; to&#39; /uploads/session_timeout_formatting_bug.png'在第18行的C:\ wamp \ www \ project_fileshare \ index.php
第18行是调用move_uploaded_file()函数的行。
如何修复此错误?我有一个&#39; uploads_dir&#39;文件夹与index.php文件位于同一文件夹中。 (参考上面的文件路径)。我在这做错了什么?我必须误解这个过程中的一小部分,并将我的目录放在错误的位置,或者我在代码中做错了。
有人可以发现我的错误并告诉我需要做些什么来解决它?
答案 0 :(得分:2)
您正在使用Windows,并且您告诉PHP一个无法访问的位置(即/uploads
linux路径)。
由于您在Windows中工作且文档根目录为C:\wamp\www\simpleupload
这意味着,您的文件位于以下位置:
C:\wamp\www\simpleupload\index.php
(您的上传脚本)C:\wamp\www\simpleupload\uploads
(应上传文件的地方)为什么不使用这样的绝对路径:
$uploads_dir = getcwd() . DIRECTORY_SEPARATOR . 'uploads';
getcwd()函数将返回执行PHP脚本的当前工作目录(在您的情况下为index.php),因此$uploads_dir
现在将如下所示:C:\wamp\www\simpleupload\uploads
试试这个。
答案 1 :(得分:0)
如果您的上传目录与index.php位于同一位置,请删除&#34; /&#34;在你的$ uploads_dir变量中。这个,或者添加一个&#34;。&#34;在斜杠之前,因为现在它引用了可能是其他东西的根,然后是当前的工作目录。说到魔鬼; http://php.net/manual/en/function.getcwd.php
$uploads_dir = getcwd() . '\uploads';
$uploads_dir = __DIR__ . '\uploads'; #php > 5.6
另外,检查你的目录是否可以写入php: http://php.net/manual/en/function.is-writable.php
Latheesan说,最好是跨平台,因为我在编辑中看到同样的错误。
<?php
function buildPath(...$segments){
return join(DIRECTORY_SEPARATOR, $segments);
}
echo buildPath(__DIR__, 'uploads');
?>
答案 2 :(得分:0)
我会改变
if(isset($_FILES['thefile'])){
此
if($_FILE['thefile']['error'] === UPLOAD_ERR_OK){
因为我认为这是了解用户上传文件或输入是否为空白的最佳方法。
或强>
if (isset($_FILE["thefile"]["name"])){