Php将图像上载到目录

Php将图像上载到目录,php,Php,我一直在试验php的上传功能,我一直在看关于w3school的教程 http://www.w3schools.com/php/php_file_upload.asp I installed this script on MYDOMAIN.com/New.html <html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <la

我一直在试验php的上传功能,我一直在看关于w3school的教程

http://www.w3schools.com/php/php_file_upload.asp

I installed this script on MYDOMAIN.com/New.html


<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>
http://www.w3schools.com/php/php_file_upload.asp
我在MYDOMAIN.com/New.html上安装了此脚本
文件名:

然后我把这个片段放到MYDOMAIN.com/upload\u file.php上

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>


现在很有可能我只是一个非常困惑的人,但我想应该做的是将我放入新的.html文件中的文件,如果它是图像文件,则将其上载到我的目录,但它只是输出无效文件,我不确定该做些什么,任何帮助都很好,希望很快能听到回复谢谢要上传图像,我认为应该复制一个图像并存储在文件夹中,然后将图像的新位置存储到数据库中

要移动文件,我们可以使用移动文件功能

$oldpath = $_FILES['image']['tmp_name'];
$newpath ="new_folder_location/".$_FILES['image']['name'];
move_uploaded_file($oldpath, $newpath);

这是因为以下表达式的计算结果为false:

(($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)

验证代码正在检查扩展名、mime类型和文件大小

您可能正在上载扩展名中包含大写字符的文件。当您检查扩展名时,您检查它是否区分大小写,
.JPG
是有效的图像文件扩展名,因此您应该使您的检查不区分大小写:

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array(strtolower($extension), $allowedExts))
         // ^ added strtolower()

我想说问题在于,如果有很多条件(还有“无效文件”是If的另一部分),尝试简化它以跟踪问题,乍一看我会说这是因为大小检查:

&& ($_FILES["file"]["size"] < 20000)
&($\u文件[“文件”][“大小”]<20000)

这大约是20Kb,对于上传照片的图像来说相当小,请尝试输入更高的值或去掉该条件,然后查看脚本是否工作。

脚本的问题是,您可能试图上传的文件超出了您的限制!您指定了一个非常低的最大文件大小!打印出您的$\u文件变量,以获取有关错误的信息;)

但是,要将文件移动到文件夹中,您仍然需要使用:


我同意Ivo的答案,但我认为你可能会改变下一个答案 下面是一段代码:

$typePicture = array('jpg','png','jpeg','gif');

// Allow certain file formats

if($typePicture[0] != "jpg" || $typePicture[1] != "png" || $typePicture[2] != "jpeg" || $typePicture[3] != "gif" ) 
{
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

我假设您没有上载图像文件,或者上载的文件大小大于20000字节。请不要使用w3schools:show结果
print\r($\u文件)什么是var_dump($_文件)打印+1表示strtolower()
。这正好说明了W3学校的教程有多么糟糕。我完全不同意。我根本不懂这些东西,他们一点帮助也没有。嗯,乍一看,这似乎解决了问题,但它给了我一个tmp文件home/content/34/9587634/tmp/phpSrWuFu,这真是太棒了,但我在我的目录中查找,什么都没有???你需要最后一步,,上载文件时,它总是先保存在tmp目录中,然后使用该功能将其移动到所需的实际目录。这是标准程序。也许这是你错过的教程的最后一步,或者用谷歌搜索另一个来查看指定的最后一步,它们有很多。当你分解扩展名文件时,你忘记了结果是在一个数组中返回的,这个数组的第一个索引是“文件名”,第二个索引是“文件扩展名”,因此,我将其改为“if(in_数组($ext.$allow)),而不是“if(in_数组($ext[1].$allow))感谢@BlankEDjok指出这一点,尽管你仍然不完全正确!你不应该在数组中连接
中的参数;这是毫无意义的!使用文件名的最后一段是正确的,我已经修复了;)Lol抱歉,我没有看到,这只是一个输入错误。:)
print_r($_FILES);
&& ($_FILES["file"]["size"] < 20000)
$allow = array("jpg", "jpeg", "gif", "png");

$todir = 'uploads/';

if ( !!$_FILES['file']['tmp_name'] ) // is the file uploaded yet?
{
    $info = explode('.', strtolower( $_FILES['file']['name']) ); // whats the extension of the file

    if ( in_array( end($info), $allow) ) // is this file allowed
    {
        if ( move_uploaded_file( $_FILES['file']['tmp_name'], $todir . basename($_FILES['file']['name'] ) ) )
        {
            // the file has been moved correctly
        }
    }
    else
    {
        // error this file ext is not allowed
    }
}
$typePicture = array('jpg','png','jpeg','gif');

// Allow certain file formats

if($typePicture[0] != "jpg" || $typePicture[1] != "png" || $typePicture[2] != "jpeg" || $typePicture[3] != "gif" ) 
{
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}