用于文件上传的php脚本,PHP上传文件

发布时间:2022-11-25

本文目录一览:

  1. 我要在本地测试一个检验上传的php脚本,怎么构造request上传文件
  2. php多文件上传实现代码
  3. 怎样用PHP实现文件上传
  4. 求实现php文件上传代码
  5. php上传文件代码,能用的代码
  6. [求一个PHP 文件上传程序](#求一个PHP 文件上传程序)

我要在本地测试一个检验上传的php脚本,怎么构造request上传文件

使用 Postman 等工具或者使用 SymfonyHttpFoundation 组件中的 Request::create 方法。 后者的好处是你可以将每一个接口的 Request 对象都提前构造好,可以模拟 request bodyquery stringcookiesessionfile 等,测试接口时只需要调用对应的 Request 对象,这样可以不借助任何第三方工具来测试接口。

php多文件上传实现代码

这篇文章主要介绍了 php 多文件上传实现代码,需要的朋友可以参考下。

index_uploads.php

<html>
<head>
<meta charset="utf-8">
<title>index_uploads</title>
</head>
<body>
<form action="uploads.php" method="post" enctype="multipart/form-data">
<input type="file" name="file[]"><br>
<input type="file" name="file[]"><br>
<input type="submit" value="uploads">
</form>
</body>
</html>

uploads.php

<?php
header("content-type:text/html;charset=utf-8");
echo "<pre>";
print_r($_FILES);
echo "</pre>";
$count = count($_FILES['file']['name']);
for ($i = 0; $i < $count; $i++) {
    $tmpfile = $_FILES['file']['tmp_name'][$i];
    $filefix = array_pop(explode(".", $_FILES['file']['name'][$i]));
    $dstfile = "uploads/files/".time()."_".mt_rand().".".$filefix;
    if (move_uploaded_file($tmpfile, $dstfile)) {
        echo "<script>alert('succeed!');window.location.href='index_uploads.php';</script>";
    } else {
        echo "<script>alert('fail!');window.location.href='index_uploads.php';</script>";
    }
}
?>

核心:

  1. 上传首页中 input 的 name 属性是这么设置的。
  2. 用 while 循环上传多文件。

怎样用PHP实现文件上传

创建一个文件上传表单

允许用户从表单上传文件是非常有用的。 请看下面这个供上传文件的 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>

请留意如下有关此表单的信息:

  • form 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"
  • input 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。


创建上传脚本

upload_file.php 文件含有供上传文件的代码:

<?php
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"];
}
?>

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。 第一个参数是表单的 input name,第二个下标可以是 "name""type""size""tmp_name""error"。就像这样:

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型
  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传导致的错误代码 这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

上传限制

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif.jpeg 文件,文件大小必须小于 20 kb:

<?php
if ((($_FILES["file"]["type"] == "image/gif") ||
     ($_FILES["file"]["type"] == "image/jpeg") ||
     ($_FILES["file"]["type"] == "image/pjpeg")) &&
    ($_FILES["file"]["size"] < 20000)) {
    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";
}
?>

注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。


保存被上传的文件

上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。 这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

<?php
if ((($_FILES["file"]["type"] == "image/gif") ||
     ($_FILES["file"]["type"] == "image/jpeg") ||
     ($_FILES["file"]["type"] == "image/pjpeg")) &&
    ($_FILES["file"]["size"] < 20000)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_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 "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
        if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo $_FILES["file"]["name"] . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
        }
    }
} else {
    echo "Invalid file";
}
?>

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。

注释:这个例子把文件保存到了名为 "upload" 的新文件夹。


求实现php文件上传代码

PHP 上传文件非常简单,你需要一个上传的 HTML 文件(FORM),一个保存文件的 PHP 文件(保存),一个查询上传文件清单的工具。 真正实现完整功能的上传和管理需要使用数据库,我的网站俱乐部里面上传文件一开放很快就传了几万个文件。 最简单的方法不用数据库,可以用一个 PHP 文件实现,这个文件列出指定目录下的所有文件,然后提供一个上传的 FORM,最后检测是否提交了 FORM 数据,是就保存文件到指定位置。 PHP 手册第 39 章有关于处理这些问题的说明,我复制粘贴如下:

POST 方法上传

本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理。 PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,打了补丁的 Microsoft Internet Explorer 3 或者更高版本)上传的文件。 相关的设置:请参阅 php.ini 的 file_uploadsupload_max_filesizeupload_tmp_dirpost_max_size 以及 max_input_time 设置选项。 请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。请参阅对 PUT 方法的支持以获取更多信息。

例 39.1. 文件上传表单

可以如下建立一个特殊的表单来支持文件上传:

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

以上范例中的 __URL__ 应该被换掉,指向一个真实的 PHP 文件。 MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。

注意:要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件上传不了。 全局变量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息。 以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。

  • $_FILES['userfile']['name'] - 客户端机器文件的原名称。
  • $_FILES['userfile']['type'] - 文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
  • $_FILES['userfile']['size'] - 已上传文件的大小,单位为字节。
  • $_FILES['userfile']['tmp_name'] - 文件被上传后在服务端储存的临时文件名。
  • $_FILES['userfile']['error'] - 和该文件上传相关的错误代码。此项目是在 PHP 4.2.0 版本中增加的。 文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。

例 39.2. 使文件上传生效

请查阅函数 is_uploaded_file()move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>

接受上传文件的 PHP 脚本为了决定接下来要对该文件进行哪些操作,应该实现任何逻辑上必要的检查。例如可以用 $_FILES['userfile']['size'] 变量来排除过大或过小的文件,也可以通过 $_FILES['userfile']['type'] 变量来排除文件类型和某种标准不相符合的文件,但只把这个当作一系列检查中的第一步,因为此值完全由客户端控制而在 PHP 端并不检查。自 PHP 4.2.0 起,还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来计划下一步如何处理。不管怎样,要么将该文件从临时目录中删除,要么将其移动到其它的地方。 如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为空。 如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。

例 39.3. 上传一组文件

PHP 的 HTML 数组特性甚至支持文件类型。

<form action="" method="post" enctype="multipart/form-data">
    <p>Pictures:
    <input type="file" name="pictures[]" />
    <input type="file" name="pictures[]" />
    <input type="file" name="pictures[]" />
    <input type="submit" value="Send" />
    </p>
</form>
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "data/$name");
    }
}
?>

php上传文件代码,能用的代码

<?php
$uptypes = array(
    'image/jpg', //上传文件类型列表
    'image/jpeg',
    'image/png',
    'image/pjpeg',
    'image/gif',
    'image/bmp',
    'image/x-png'
);
$max_file_size = 5000000; //上传文件大小限制, 单位BYTE
$destination_folder = "upload/"; //上传文件路径
$watermark = 1; //是否附加水印(1为加水印,其他为不加水印);
$watertype = 1; //水印类型(1为文字,2为图片)
$waterposition = 1; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
$waterstring = "newphp.site.cz"; //水印字符串
$waterimg = "xplore.gif"; //水印图片
$imgpreview = 1; //是否生成预览图(1为生成,其他为不生成);
$imgpreviewsize = 1/2; //缩略图比例
?>
<html>
<head>
<title>M4U BLOG - fywyj.cn</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
body,td{font-family:tahoma,verdana,arial;font-size:11px;line-height:15px;background-color:white;color:#666666;margin-left:20px;}
strong{font-size:12px;}
a:link{color:#0066CC;}
a:hover{color:#FF6600;}
a:visited{color:#003366;}
a:active{color:#9DCC00;}
table.itable{}
td.irows{height:20px;background:url("index.php?i=dots") repeat-x bottom}
</style>
</head>
<body>
<center>
<form enctype="multipart/form-data" method="post" name="upform">
上传文件: <br><br><br>
<input name="upfile" type="file" style="width:200;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff" size="17">
<input type="submit" value="上传" style="width:30;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff" size="17"><br><br><br>
允许上传的文件类型为:jpg|jpeg|png|pjpeg|gif|bmp|x-png|swf <br><br>
<a href="index.php">返回</a>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
        //是否存在文件
        echo "<font color='red'>文件不存在!</font>";
        exit;
    }
    $file = $_FILES["upfile"];
    if ($max_file_size < $file["size"]) {
        //检查文件大小
        echo "<font color='red'>文件太大!</font>";
        exit;
    }
    if (!in_array($file["type"], $uptypes)) {
        //检查文件类型
        echo "<font color='red'>只能上传图像文件或Flash!</font>";
        exit;
    }
    if (!file_exists($destination_folder)) {
        mkdir($destination_folder);
    }
    $filename = $file["tmp_name"];
    $image_size = getimagesize($filename);
    $pinfo = pathinfo($file["name"]);
    $ftype = $pinfo["extension"];
    $destination = $destination_folder . time() . "." . $ftype;
    if (file_exists($destination) && $overwrite != true) {
        echo "<font color='red'>同名文件已经存在了!</a>";
        exit;
    }
    if (!move_uploaded_file($filename, $destination)) {
        echo "<font color='red'>移动文件出错!</a>";
        exit;
    }
    $pinfo = pathinfo($destination);
    $fname = $pinfo["basename"];
    echo " <font color=red>已经成功上传</font><br>文件名: <font color=blue>" . $destination_folder . $fname . "</font><br>";
    echo " 宽度:" . $image_size[0];
    echo " 长度:" . $image_size[1];
    if ($watermark == 1) {
        $iinfo = getimagesize($destination, $iinfo);
        $nimage = imagecreatetruecolor($image_size[0], $image_size[1]);
        $white = imagecolorallocate($nimage, 255, 255, 255);
        $black = imagecolorallocate($nimage, 0, 0, 0);
        $red = imagecolorallocate($nimage, 255, 0, 0);
        imagefill($nimage, 0, 0, $white);
        switch ($iinfo[2]) {
            case 1:
                $simage = imagecreatefromgif($destination);
                break;
            case 2:
                $simage = imagecreatefromjpeg($destination);
                break;
            case 3:
                $simage = imagecreatefrompng($destination);
                break;
            case 6:
                $simage = imagecreatefromwbmp($destination);
                break;
            default:
                die("<font color='red'>不能上传此类型文件!</a>");
                exit;
        }
        imagecopy($nimage, $simage, 0, 0, 0, 0, $image_size[0], $image_size[1]);
        imagefilledrectangle($nimage, 1, $image_size[1] - 15, 80, $image_size[1], $white);
        switch ($watertype) {
            case 1: //加水印字符串
                imagestring($nimage, 2, 3, $image_size[1] - 15, $waterstring, $black);
                break;
            case 2: //加水印图片
                $simage1 = imagecreatefromgif("xplore.gif");
                imagecopy($nimage, $simage1, 0, 0, 0, 0, 85, 15);
                imagedestroy($simage1);
                break;
        }
        switch ($iinfo[2]) {
            case 1:
                //imagegif($nimage, $destination);
                imagejpeg($nimage, $destination);
                break;
            case 2:
                imagejpeg($nimage, $destination);
                break;
            case 3:
                imagepng($nimage, $destination);
                break;
            case 6:
                imagewbmp($nimage, $destination);
                //imagejpeg($nimage, $destination);
                break;
        }
        //覆盖原上传文件
        imagedestroy($nimage);
        imagedestroy($simage);
    }
    if ($imgpreview == 1) {
        echo "<br>图片预览:<br>";
        echo "<a href=\"" . $destination . "\" target='_blank'><img src=\"" . $destination . "\" width=" . ($image_size[0] * $imgpreviewsize) . " height=" . ($image_size[1] * $imgpreviewsize);
        echo " alt=\"图片预览:\r文件名:" . $destination . "\r上传时间:\" border='0'/></a>";
    }
}
?>
</center>
</body>
</html>

绝对好用!!!!给分吧

求一个PHP 文件上传程序

1. upfile.php 文件

<html>
<body>
<title>文件上传</title>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="file" name="upfile" size="10"><br><br>
<input type="submit" value="上载文件">
</form>
</body>
</html>

2. upload.php

<?php
//取得当前日期信息,并连接成为一个字符串
$datetime = getdate();
$time = implode("", $datetime);
//构造文件名
$filename = "uploadfiles/" . $time . " " . $upfile_name;
//将文件实际的存放在服务器上
$copymes = copy($upfile, $filename);
if ($copymes) {
    print("文件上传成功!<br>\n");
    print("文件名:$upfile_name<br>\n");
    print("上传的文件大小:$upfile_size<br>\n");
} else {
    print("文件上传失败!<br>\n");
}
if (($upfile_type == "image/gif") || ($upfile_type == "image/pjpeg")) {
    //如果是图形文件格式则显之
    echo "<p><img src=";
    echo $filename;
    echo "'height=150 width=150 align=center border=0";
}
?>

3. 请在上面的那个文件所在目录创建一个目录 uploadfiles 就可以了

参考示例: