当前位置:首页 » 文件管理 » php上传文件实例

php上传文件实例

发布时间: 2024-04-12 20:56:39

㈠ 关于php实现文件上传

php的文件上传机制是把用户上传的文件保存在php.ini的upload_tmp_dir定义的临时目录(默认是系统的临时目录,如:/tmp)里的一个类似phpxXuoXG的随机临时文件,程序执行结束,该临时文件也被删除。PHP给上传的文件定义了四个变量:(如form变量名是file,而且register_globals打开)

$file #就是保存到服务器端的临时文件(如/tmp/phpxXuoXG )

$file_size #上传文件的大小

$file_name #上传文件的原始名称

$file_type #上传文件的类型

推荐使用:

$_FILES['file']['tmp_name']

$_FILES['file']['size']

$_FILES['file']['name']

$_FILES['file']['type']

㈡ php上传文件,创建递归目录的实例代码

复制代码
代码如下:
<?php
$uid=$_REQUEST['uid'];
$avatar
=
'D:/avic/discuz/uc_server/data/avatar/'.get_avatar($uid,
$size,
$type);
$dir=dirname($avatar);
//创建目录成功后移动临时文件
if(mkdirs($dir)){
if($_FILES["pic"]["error"]
>=
0){
if(move_uploaded_file($_FILES['pic']['tmp_name'],$avatar)){
$errorcode=1;
}else{
$errorcode=0;
$errormsg="文件移动失败";
}
}else{
$errorcode=0;
$errormsg=$_FILES['pic']['error'];
}
}
$back=array("errorcode"=>$errorcode,'errormsg'=>$errormsg);
echo
json_encode($back);
//返回图片要存储的路径
function
get_avatar($uid,
$size
=
'middle',
$type
=
'')
{
$size
=
in_array($size,
array('big',
'middle',
'small'))
?
$size
:
'middle';
$uid
=
abs(intval($uid));
$uid
=
sprintf("%09d",
$uid);
$dir1
=
substr($uid,
0,
3);
$dir2
=
substr($uid,
3,
2);
$dir3
=
substr($uid,
5,
2);
$typeadd
=
$type
==
'real'
?
'_real'
:
'';
return
$dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid,
-2).$typeadd."_avatar_$size.jpg";
}
//递归创建目录,若传的$dir不是绝对路径,则会和运行此方法的目录同级
function
mkdirs($dir){
if(!is_dir($dir)){
if(!mkdirs(dirname($dir))){
return
false;
}
if(!mkdir($dir,0777)){
return
false;
}
}
return
true;
}
?>

㈢ 经典怎样通过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";
}
?>

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

㈣ 用php如何把一些文件和图片上传到另一指定的服务器

一个实例:

首先,在自己台式机和笔记本上都开通了ftp,这个不会的同学可以网上查serv-u,相关教程肯定不少的。

然后在台式机本地做了个测试:

$ftp_server = "192.168.1.100";
$ftp_user_name = "laohu";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = 'test.txt';
$remote_file = '/test/a.txt';
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件移动成功\n";
} else {
echo "移动失败\n";
}
ftp_close($conn_id);

运行后:文件移动成功。

要的就是这个效果了,之后用台式机做程序服务器,上传附件时全用ftp方法上传至笔记本上,笔记本ip是105,相应代码如下:

if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
$ftp_server = "192.168.1.105";
$ftp_user_name = "lesley";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = $_FILES['uploadfile']['tmp_name'];
$remote_file = '/test/'.$_FILES['uploadfile']['name'];
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件:".$_FILES['uploadfile']['name']."上传成功\n";
} else {
echo "上传失败\n";
}
ftp_close($conn_id);
}

对应的前台页面代码:

<form action="uploadfile.php" method="post" enctype="multipart/form-data">
<input type="file" name="uploadfile" id="uploadfile" />
<input type="submit" name="submit" value="submit" />
</form>

运行后确实成功。

需要注意:
在用ftp_put方法时,第四个参数传送模式,需要用FTP_BINARY(二进制模式),用FTP_ASCII(文本模式)时,图片能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了。

㈤ php文件上传,提示移动文件失败

php文件上传,提示移动文件失败,基本是上传保存的目录不可写造成的,需要好好设置一下,下面是一个PHP文件上传的简单例子,仅作参考:


<formaction=""enctype="multipart/form-data"method="post"
name="uploadfile">上传文件:<inputtype="file"name="upfile"/><br>
<inputtype="submit"value="上传"/></form>
<?php
//print_r($_FILES["upfile"]);
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"];
//获取数组里面的值
$name=$upfile["name"];//上传文件的文件名
$type=$upfile["type"];//上传文件的类型
$size=$upfile["size"];//上传文件的大小
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
//判断是否为图片
switch($type){
case'image/pjpeg':$okType=true;
break;
case'image/jpeg':$okType=true;
break;
case'image/gif':$okType=true;
break;
case'image/png':$okType=true;
break;
}
if($okType){
/**
*0:文件上传成功<br/>
*1:超过了文件大小,在php.ini文件中设置<br/>
*2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/>
*3:文件只有部分被上传<br/>
*4:没有文件被上传<br/>
*5:上传文件大小为0
*/
$error=$upfile["error"];//上传后系统返回的值
echo"================<br/>";
echo"上传文件名称是:".$name."<br/>";
echo"上传文件类型是:".$type."<br/>";
echo"上传文件大小是:".$size."<br/>";
echo"上传后系统返回的值是:".$error."<br/>";
echo"上传文件的临时存放路径是:".$tmp_name."<br/>";
echo"开始移动上传文件<br/>";
//把上传的临时文件移动到up目录下面
move_uploaded_file($tmp_name,'up/'.$name);
$destination="up/".$name;
echo"================<br/>";
echo"上传信息:<br/>";
if($error==0){
echo"文件上传成功啦!";
echo"<br>图片预览:<br>";
echo"<imgsrc=".$destination.">";
//echo"alt="图片预览: 文件名:".$destination." 上传时间:">";
}elseif($error==1){
echo"超过了文件大小,在php.ini文件中设置";
}elseif($error==2){
echo"超过了文件的大小MAX_FILE_SIZE选项指定的值";
}elseif($error==3){
echo"文件只有部分被上传";
}elseif($error==4){
echo"没有文件被上传";
}else{
echo"上传文件大小为0";
}
}else{
echo"请上传jpg,gif,png等格式的图片!";
}
}
?>

㈥ 多文件上传php怎么写

方法一:当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,也即表单为这种形式。
HTML代码:
1<formaction=""method="post"enctype="multipart/form-data">
2<inputtype="hidden"name="MAX_FILE_SIZE"value="">
3<inputtype="file"name="pic[]"/><br><br>
4<inputtype="file"name="pic[]"/><br><br>
5<inputtype="file"name="pic[]"/><br><br>
6<inputtype="file"name="pic[]"/><br><br>
7<inputtype="submit"value="upload"/>
8</form>
PHP代码:
01<?php
02//1.获取要上传文件的信息
03$up_info=$_FILES['pic'];
04
05$ob_path="../system";
06
07$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png");//定义运行的上传文件类型
08
09
10for($i=0;$i<count($up_info['name']);$i++){//foreach循环处理多个文件上传
11//2.判断文件是否上传错误
12
13if($up_info['error'][$i]>0){
14switch($up_info['error'][$i]){
15case1:
16$err_info="上传的文件超过了php.ini中upload_max_filesize选项限制的值";
17break;
18case2:
19$err_info="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
20break;
21case3:
22$err_info="文件只有部分被上传";
23break;
24case4:
25$err_info="没有文件被上传";
26break;
27case6:
28$err_info="找不到临时文件夹";
29break;
30case7:
31$err_info="文件写入失败";
32break;
33default:
34$err_info="未知的上传错误";
35break;
36}
37continue($err_info);
38}
39
40
41//3.判断文件上传的类型是否合法
42
43if(!in_array($up_info['type'][$i],$typelist)){
44continue('文件类型错误!'.$up_info['type'][$i]);
45}
46
47//4.上传文件的大小过滤
48
49if($up_info['size'][$i]>1000000){
50continue('文件大小超过1000000');
51}
52
53
54//5.上传文件名处理
55
56$exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);
57
58do{
59$main_name=date('YmHis'.'--'.rand(100,999));
60$new_name=$main_name.'.'.$exten_name;
61}while(file_exists($to_path.'/'.$new_name));
62
63
64
65//6.判断是否是上传的文件,并执行上传
66
67if(is_uploaded_file($up_info['tmp_name'][$i])){
68
69if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){
70echo'文件上传成功!';
71}else{
72echo'上传文件移动失败!';
73}
74}else{
75echo'文件不是上传的文件';
76}
77
78}//for循环的括号
方法二:当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时
也即表单为这种形式:
1<formaction=""method="post"enctype="multipart/form-data">
2<inputtype="hidden"name="MAX_FILE_SIZE"value="">
3<inputtype="file"name="pic"/><br><br>
4<inputtype="file"name="text"/><br><br>
5<inputtype="file"name="doc"/><br><br>
6<inputtype="file"name="pdf"/><br><br>
7
8<inputtype="submit"value="upload"/>
9</form>
01//1.获取要上传文件的信息
02$up_info=$_FILES;
03
04$ob_path="..system";
05
06$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png");//定义运行的上传文件类型
07
08
09
10foreach($up_infoas$k_name=>$value){//用foreach循环处理多个文件的上传
11//2.判断文件是否上传错误
12
13if($up_info[$k_name]['error']>0){
14switch($up_info['error'][$i]){
15case1:
16$err_info="上传的文件超过了php.ini中upload_max_filesize选项限制的值";
17break;
18case2:
19$err_info="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
20break;
21case3:
22$err_info="文件只有部分被上传";
23break;
24case4:
25$err_info="没有文件被上传";
26break;
27case6:
28$err_info="找不到临时文件夹";
29break;
30case7:
31$err_info="文件写入失败";
32break;
33default:
34$err_info="未知的上传错误";
35break;
36}
37continue($err_info);
38}
39
40
41//3.判断文件上传的类型是否合法
42
43if(!in_array($up_info[$k_name]['type'],$typelist)){
44continue('文件类型错误!'.$up_info[$k_name]['type']);
45}
46
47//4.上传文件的大小过滤
48
49if($up_info[$k_name]['size']>100000){
50echo'文件大小超过**';
51continue;
52}
53
54
55//5.上传文件名处理
56
57$exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);
58
59do{
60$main_name=date('YmHis'.'--'.rand(100,999));
61$new_name=$main_name.'.'.$exten_name;
62}while(file_exists($to_path.'/'.$new_name));
63
64
65//6.判断是否是上传的文件,并执行上传
66
67if(is_uploaded_file($up_info[$k_name]['tmp_name'])){
68
69if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){
70echo'文件上传成功!';
71}else{
72echo'上传文件移动失败!';
73}
74}else{
75echo'文件不是上传的文件';
76}
77
78}//for循环的括号
方法三:先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,也可以到达多文件上传的目的,而且这种方式,更容易理解。
1<formaction=""method="post"enctype="multipart/form-data">
2<inputtype="hidden"name="MAX_FILE_SIZE"value="">
3<inputtype="file"name="pic1"><br>
4<inputtype="file"name="pic2"><br>
5<inputtype="file"name="pic3"><br>
6<inputtype="submit"value="upload">
7</form>
001/*
002*单文件上传函数
003*@paramarray$up_info记录上传文件信息的超全局数组
004*@paramstring$to_path上传文件的目标路径
005*@paramarray$typlist允许的文件类型
006*@paramint$file_size允许的文件大小
007*@returnstring上传失败,返回失败的原因,
008*http://yige.org/php/
009*成功返回包括文件名的路径。
010*/
011
012
013functionupload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){
014
015//1.判断文件上传是否错误
016
017if($up_file['error']>0){
018switch($up_info['error']){
019case1:
020$err_info="上传的文件超过了php.ini中upload_max_filesize选项限制的值";
021break;
022case2:
023$err_info="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
024break;
025case3:
026$err_info="文件只有部分被上传";
027break;
028case4:
029$err_info="没有文件被上传";
030break;
031case6:
032$err_info="找不到临时文件夹";
033break;
034case7:
035$err_info="文件写入失败";
036break;
037default:
038$err_info="未知的上传错误";
039break;
040}
041
042return$err_info;
043die();
044}
045
046
047//2.判断上传文件类型是否合法
048
049if(count($typelist)>0){
050if(!in_array($up_info['type'],$typelist)){
051
052$err_info='文件类型不合法!'.$up_info['type'];
053return$err_info;
054die();
055}
056}
057
058//4.判断上传文件大小是否超出允许值
059
060if($up_info['size']>$file_size){
061
062return$err_info='文件大小超过'.$file_size;
063die();
064}
065
066//5.上传文件重命名
067
068$exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);
069
070do{
071$main_name=date('YmHis'.'--'.rand(100,999));
072$new_name=$main_name.'.'.$exten_name;
073}while(file_exists($to_path.'/'.$new_name));
074
075//6.判断是否是上传的文件,并移动文件
076
077if(is_uploaded_file($up_info['tmp_name'])){
078
079if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){
080
081$err_info=$to_path.'/'.$new_name;
082return$err_info;
083die();
084}else{
085
086return$err_info='上传文件移动失败!';
087die();
088
089}
090}else{
091
092return$err_info='这个文件不是上传文件!';
093die();
094}
095
096}
097
098//函数使用方法如下
099
100$multi_info=$_FILES;//接收$_FILES的全部上传信息
101
102$to_path='system';//上传文件的目标路径
103
104foreach($multi_infoas$name=>$up_info){//foreach遍历$multi_info
105
106$err_info=upload_fun($up_info,$to_path);//调用单文件上传函数
107
108p($err_info);//输出返回信息;
109
110}

㈦ 如何使用php中ftp函数上传文件以及解决上传文件失败的方法

因为系统重构实现均衡负载,网站程序与文件服务器不在一台机子上。于是,程序在上传文件的同时就要将文件上传到文件服务器上。
这里涉及到windows主机上传到linux主机,linux主机上传到linux主机。这两个之间呢,只是稍微的有点区别,因为windows的路径可以兼容linux路径,但是linux的路径不兼容windows主机'\\'的写法。所以,在写路径的时候稍加注意即可。
下面,就列举上面两种情况php中使用ftp函数上传文件的具体实现代码。
一、 ftp上传图片参数说明。
$source:本机图片完整的路径。(/a/b/c.jpg)
$des :上传目标linux主机完整的路径。
$ftp_server:ftp地址
$ftp_user_name:ftp用户名
$ftp_user_pass: ftp密码
$port:端口
二、如何使用php中ftp函数上传文件的方法
例如:
本地地址为:/a/b/c.jpg
目标地址为:/d/a/b/c.jpg
2.1、linux主机上传linux主机。
function ftpSendFile($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
{
// 此步骤是在于上传目录与本机的目录不一致转换使用
$des = "/d" . $des;
$conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, TRUE);
$ftp_folder = dirname($des);
$dir = explode("/", $ftp_folder);
$path = "";
for ($i = 0; $i < count($dir); $i++) {
$path .= "/" . $dir[$i];
if (!ftp_chdir($conn_id, $path)) {
$result = ftp_mkdir($conn_id, $path);
}
}
if (ftp_put($conn_id, $des, $source, FTP_BINARY)) {
return 1;
} else {
return 0;
}
ftp_close($conn_id);
}
2、windows主机上传linux主机。
function sendPic($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
{
$des = "/d" . $des;
$conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, TRUE);
$ftp_folder = dirname(str_ireplace('\\', '/', $des));
$dir = explode("/", $ftp_folder);
$path = "";
for ($i = 0; $i < count($dir); $i++) {
$path .= "/" . $dir[$i];
if (!ftp_chdir($conn_id, $path)) {
$result = ftp_mkdir($conn_id, $path);
}
}
if (ftp_put($conn_id, str_ireplace('\\', '/', $des), $source, FTP_BINARY)) {
return 1;
} else {
return 0;
}
ftp_close($conn_id);
}
上面的两种使用php中ftp函数上传文件的方法基本可以满足正常的使用。

热点内容
英雄联盟技能脚本 发布:2024-05-17 14:59:41 浏览:444
全名k歌安卓手机里面怎么录屏 发布:2024-05-17 14:40:07 浏览:180
常用数据库介绍 发布:2024-05-17 14:31:38 浏览:504
中孚存储介质信息消除工具 发布:2024-05-17 14:31:33 浏览:589
服务器访问ip如何调转主页 发布:2024-05-17 14:30:33 浏览:789
好玩的解压化妆小游戏 发布:2024-05-17 14:10:57 浏览:127
交通银行怎么登陆不了密码 发布:2024-05-17 13:54:48 浏览:543
安卓如何自动连接无线 发布:2024-05-17 13:53:51 浏览:262
python的urlparse 发布:2024-05-17 13:44:20 浏览:769
linux命令全称 发布:2024-05-17 12:07:54 浏览:110