phpuploadfile
<?php
//$uploaddir = "D:My Documents/phpnow/htdocs/mysite/_notes/upload/";原代码,路径少了个斜杠,按道理是错误的.
$uploaddir = "D:/My Documents/phpnow/htdocs/mysite/_notes/upload/";//设置文件保存目录 注意包含/
$type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型
// 下面这句,程序中都没有用到,估计是用来做预览图片的浏览路径的.
//因为,如果是在服务器上面,使用$uploaddir这种本地路径(相对于http://这种网络路径)的地址来
//访问是访问不到的,所以应该改成这样如下,相应的图片的预览路径也有一点改动
$patch="http://127.0.0.1/mysite/_notes/upload/";//程序所在路径
function fileext($filename)
{
return substr(strrchr($filename, '.'), 1);
}//获取文件后缀名函数
function random($length)
{
$hash = 'CR-';
$chars = '';
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++)
{
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
$a=strtolower(fileext(@$_FILES['file']['name']));//生成随机文件名函数
if(!in_array(strtolower(fileext(@$_FILES['file']['name'])),$type))
{
$text=implode(",",$type);
echo "您只能上传以下类型文件: ",$text,"<br>";
}//判断文件类型
else
{
$filename=explode(".",$_FILES['file']['name']);
do
{
$filename[0]=random(6); //设置随机数长度
$name=implode(".",$filename); //$name1=$name.".Mcncc";
$uploadfile=$uploaddir.$name;
}
while(file_exists($uploadfile));
//原代码是先移动文件(已经移动,原文件不存在了),后判断是否是通过上传的文件(当然了,文件都没了,怎么还会是true呢.),
if(is_uploaded_file(@$_FILES['file']['tmp_name'])&&move_uploaded_file(@$_FILES['file']['tmp_name'],$uploadfile)){
//输出图片预览,注意img标签的src,有改动
echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center><img src='{$patch}{$name}'></center>";
echo"<br><center><a href='javascript:history.go(-1)'>继续上传</a></center>";
}else{
echo "上传失败!";
}
}
?>
B. 用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(文本模式)时,图片能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了。
C. php关于多文件上传的问题
你用下面的代码研究下吧:
提交页片段:
<form action="progress.php" method="post" enctype="multipart/form-data" >
<input type="file" name="myfile1"/>
<input type="file" name="myfile2"/>
</form>
php片段:
for($i=0;$i<=2;$i++){
if(isset($_FILES["myfile$i"])&&!empty($_FILES["myfile$i"]['name'])){
move_uploaded_file($_FILES["myfile$i"]["tmp_name"],"test/".$_FILES["myfile$i"][name]);
}
// 另外, php上传文件的大小不是设置了max_file_size就可以的
你需要打开php配置文件 php.ini
查找并修改以下项:
如:
upload_max_filesize = 50M
post_max_size = 50M
memory_limit = 128M
遵循upload_max_filesize < post_max_size < memory_limit
D. php上传文件错误怎么解决
<html>
<body>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
Choose a file to upload: <input name="uploaded_file" type="file" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
有一些规则需要建设时遵循HTML表单。首先,请确保该窗体使用POST方法。第二,形
式需要以下属性:字符编码=“多重/表单数据”。它指定的内容类型时使用的信息提
交给服务器。如果没有这些要求,您的文件上传不了。
另一个需要注意的是隐藏的表单字段名为MAX_FILE_SIZE设置的值。某些Web浏览器实
际上反映了这个领域,也不会允许用户上载文件超过这个数字(字节)更大。您应该
将此值设置为配合最大上传大小,在php.ini文件中设置。这是一套与中
upload_max_filesize,默认值是2MB的。但它仍然不能保证你的脚本将不会转交了尺
寸较大的文件。危险的是,攻击者将尝试向您发送一个请求几个大文件,并填写了文
件系统,也就是PHP存储解码文件。设置在php.ini的post_max_size的指令文件的最大
尺寸,你要(必须大于中upload_max_filesize)。默认值为10MB的。此指令控制的所
有要求,在一个允许的POST数据最大大小。另外,还要确保在你的php.ini文件
file_uploads设置为On。
至少,有一个在输入标记属性看:类型=“文件”。它是用来指定为文件选择控制输入
元素。这提供了一个文件的URI的地方,则需要键入一个“浏览”按钮,可作为替代的
URI输入使用。
在用户进入一个文件的URI,并点击提交按钮的文件的副本将被发送到服务器和用户将
被重定向到upload.php。此PHP文件将处理表单数据。
返回页首
处理表单数据(PHP代码)
当文件被上传和PHP创建了一个文件的临时副本,并建立了超全局变量$ _FILES数组,
包含有关文件的信息。对于每个文件,有5个数据。我们已上传字段命名
为'uploaded_file',所以会存在以下数据:
变量$ _FILES [“uploaded_file”] [“name”]从用户的机器上载的文件的原名称
变量$ _FILES [“uploaded_file”] [“type”]的上传文件的MIME类型(如果浏览器
提供的类型)
变量$ _FILES [“uploaded_file”] [“size”]的以字节为单位上传的文件大小
变量$ _FILES [“uploaded_file”] [“tmp_name”],在该文件暂时存储在服务器上
的位置
变量$ _FILES [“uploaded_file”] [“error”]错误代码从文件上传结果
下面的例子接受一个上传的文件并保存在上载目录中。它允许根据350Kb上传只有JPEG
图像。该代码本身,是相当清楚的,但我们会作出一些解释。有一个例子在外观和保
存此为upload.php PHP代码。
<?php
//Сheck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error']
== 0)) {
//Check if the file is JPEG image and it's size is less than 350Kb
$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg")
&&
($_FILES["uploaded_file"]["size"] < 350000)) {
//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'/upload/'.$filename;
//Check if the file with the same name is already exists on the
server
if (!file_exists($newname)) {
//Attempt to move the uploaded file to it's new place
if ((move_uploaded_file($_FILES['uploaded_file']
['tmp_name'],$newname))) {
echo "It's done! The file has been saved as: ".$newname;
} else {
echo "Error: A problem occurred ring file upload!";
}
} else {
echo "Error: File ".$_FILES["uploaded_file"]["name"]." already
exists";
}
} else {
echo "Error: Only .jpg images under 350Kb are accepted for upload";
}
} else {
echo "Error: No file uploaded";
}
?>
在此之前的上载您需要的文件,以确定文件是否真的上传任何东西。之后我们检查上
传的文件,JPEG图像,其大小小于350Kb的。接下来,我们确定的道路,这是我们要保
存此文件,并检查是否已经存在一个服务器上的这些文件的名称。当所有检查通过,
我们将文件复制到一个永久的位置使用move_upload_file()函数。此功能也证实该
文件你要过程,是一个合法的文件从用户上传结果。如果该文件上传成功,那么相应
的消息将出现。
注意:要确保PHP已经允许读取和写入临时文件中保存的位置是您要复制文件的目录。
这个例子其实很简单,它的提出是为了演示如何使用PHP上传文件。例如,您可以添加
新的条件,并允许上传GIF和PNG图像,或任何文件,您需要其他种类。如果您是本教
程使用PHP不熟悉可能是一个很好的起点。
E. php上传文件(上传后显示图片)
如果你能上传成功得话下面得
upload.php
<?
include_once ('admin_global.php');
if(isset($_POST['upload'])){
$name=$_FILES["userfile"]["name"];
$updir="../common/images/";
//$uploadfile=$uploaddir.$_FILES['userfile']['name']; //新文件
$type=$_FILES["userfile"]["type"];
$size=$_FILES["userfile"]["size"];
if($name==""){echo"<script>alert('请先选择要上传的图片文件!');window.history.back();</script>";}
$tmp_name=$_FILES["userfile"]["tmp_name"];
if($type!="image peg" && $type!="image/jpeg" && $type!="image/gif"){echo"<script>alert('上传文件只可以是JPEG或GIF类型的!');window.history.back();</script>";exit;}
if(file_exists($updir.$name)){echo"<script>alert('服务器上已有同名文件!');window.history.back();</script>";exit;}
if(move_uploaded_file($tmp_name,$updir.$name)){echo"<script>alert('图片上传完成!');</script>";}
echo"<script>window.location.href('admin_tu_add.php?n=$name');</script>";
//echo"$name";
}
?>
admin_tu_add.php
<img src="../common/images/<? echo $_GET['n']; ?>">
如果上传不了得话就是你写得上传程序可能有问题
F. 用php上传图片怎么做
上传图片原理:首先判断文件类型是否为图片格式,若是则上传文件,然后重命名文件(一般都是避免上传文件重名,现在基本上都是以为时间来命名),接着把文件上传到指定目录,成功上传后输出上传图片的预览。
1.首先我们开始判断文件类型是否为图片类型用到的函数
{
strrchr:查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
substr: 取部份字符串。
$HTTP_POST_FILES['file']['name']:获取当前上传的文件全称。
}
图片类型就是“.”后面的字符(比如:一个文件名称为XXX.JPG 那么它的类型就是“.”后面的JPG)。 我们可以用PHP中的函数来截取上传者文件名字的。我们来写个获取文件类型的函数
<?
function type()
{
return substr(strrchr($HTTP_POST_FILES['file']['name'],'.'),1);
}
?>
2.若是则上传文件,然后重命名文件用到的函数
{ strtolower:把字符串的字母全部转换为小写字母. in_array: 函数在数组中搜索给定的值。 implode:函数把数组元素组合为一个字符串 random:随机生成的数 $_FILES['userfile']['name']:上传文件名称 $uploaddir:自己定义的变量。比如在同一个文件夹里面,你想把上传的文件放到这个文件夹的FILE文件夹下,你可以这样定义$uploaddir="./file/";注意写法 } 这边会出现很多问题,第一先写一个能上传类型的数组。第二判断文件合法性。第三给文件重名。*(这边判断文件大小就不写了)先定义允许上传文件的类型数组:$type=array("jpg","gif","bmp","jpeg","png");第二用一个IF。。else。。写一个判断文件合法性的控制流语句。if(!in_arry(strtolower(type()),$type))//如果不存在能上传的类型 { $text=implode('.',$type); echo "您只能上传以下类型文件: ",$text,"<br>"; } 下面就是给他们重新命名了,else { $filename=explode(".",$_FILES['userfile']['name']);//把上传的文件名以“.”好为准做一个数组。 $time=date("m-d-H-i-s");//去当前上传的时间 $filename[0]=$time;//取文件名t替换 name=implode(".",$filename); //上传后的文件名 $uploadfile=$uploaddir.$name;//上传后的文件名地址 } 3.最后把文件上传到指定目录,成功上传后输出上传图片的预览用到的函数{ move_uploaded_file:执行上传文件 } if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)) { echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center><img src='$uploadfile'></center>"; echo"<br><center><a href='javascrīpt:history.go(-1)'>继续上传</a></center>"; } else { echo"传输失败!"; }
G. php 文件上传问题
你这段代码错误还挺多的。。
首先</form>少一个>
然后<?,php的起始符号
然后你的条件判断可以改成if($_FILES['userfile']) do_upload();
你原先的条件判断没有任何效果
然后你的一堆global都没有初始赋值 $userfile, $userfile_size, $userfile_name;
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="max_file_size" value="1000000">
<center>
请选择上传文件:
<input name="userfile" 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">
</center>
</form>
<?php
if($_FILES['userfile']) upload();
function upload(){
$uploaddir = 'qiantai/upload/';
$uploadfile = $uploaddir. $_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
print "上传成功!\n";
print_r($_FILES);
} else {
print "上传失败了鸟~\n";
print_r($_FILES);
}
print "</pre>";}
?>
H. php上传文件
根据你的程序,重新写了一套,你自己看一下吧,后面都有相关的标注,会加深印象,你原程序那个$filename是程序原本的文件名,没得到的话,真让我感觉匪夷所思……不管了,重写一个吧,你给的信息也太少了,到底怎么回事也没弄明白。
哦哦,忽然想到一种可能啊,你好好检查一下你的数据库字段,看看是不是char 类型,或text,或varcharf都可以,别是其它不支持的类型哦,这点很重要,不然我这套程序,依旧你也写不进去!!!
<?php
include "conn.php";
mysql_select_db("mydb");
if(is_uploaded_file|$_FILES['Filedata']['tmp_name']){ //这一句是用来判断是否有文件上传来的。如果有的放,才执行下面的内容;
$Filedata = $_FILES["Filedata"];
$name = $Filedata['name']; //真实的文件名字是这个,而不是tmp_name, 要知道,tmp_name是临时文件名,是php系统临时分配的文件名,只起到一个短时间中转的作用。而这个才是真正的文件名(确切地说,应该是上传时原文件名。上传后,这个文件名是可以随意更改的。)但是在我这套程序中,好像没用到它哦。
$type = $Filedata['type']; //这些和上面下面都是一样,都是$_FILES[]这个系统变量自动生成的一系列参数。这个是文件类型;
$size = $Filedata['size']; //这个是文件大小,以字节为单位;
$tmp_name = $Filedata['tmp_name']; //这个是临时文件名,看到了吧,重点就在这里,进行移动的时候这个会用到哦。
$error = $Filedata['error']; //这个是上传中是否有什么错误,如果有错误的话,会返回错误,没有是false;
////////////////////////////////////////////
//
//===========以下是对文件进行服务器端验证,做好相关工作的话,可在一定程度上防止被传木马
//
/////////////////////////////////////////////
if($size>=30000){
exit('您上传的文件大小超过限定');
}
switch($type){ //这里我用图片文件进行说明,如果你的是其它文件的话,也可以按这个方法进行处理。
case 'image/pjpeg' : $nameback='.jpg'; //jpeg
break;
case 'image/jpeg' : $nameback='.jpg'; //jpg
break;
case 'image/gif' : $nameback='.gif'; //gif
break;
case 'image/png' : $nameback='.png'; //png
break;
case 'image/bmp' : $nameback='.bmp'; //bmp
break;
case exit('类型犯规!');
} //switch end
///////////////////////////////////////////
//
//以下是对文件进行上传后处理,包括更改文件名、写入数据库。(当然还可以加入判断是否有重复文件等,这里就不做实例了。)
//
///////////////////////////////////////////
if($nameback && $error==0){
$filename='UF_' . date("Ymdhs") . $nameback; //新文件名的命名规则中间的是时间,就是这一步,可以在一定程序上防止被恶意上传;
$fileplace='uploads/' . $filename; //上传后要修改的文件(包括目录)
$fileroot='uploads/'; //上传后文件放置目录;
file_put_contents("catcah.txt",$tmp_name); //存放临时文件名
move_uploaded_file($tmp_name, $fileplace); //注意,这里放的是包括目录和文件名的变量哦,并且在这个过程中,上传的文件名也更改啦。
$username = mysql_real_escape_string($_POST['username']);
$query =@mysql_query( "INSERT INTO `$username`(`fname`,`file`)VALUES('$filename','$uploadfile')")or die("error");
}//last if end
}//upload and writefile end(the first if end)
?>
不过看你的另一个字段已经写进去了,好像不应该是数据库的问题,也许是$_FILES['Filedata']["name"]根本就没有取到值?,你不妨在那里echo一下,看看是不是有取到,要学会如何调试哦,调式能力可以考验一个phper水准的重要项目啊。
I. 请教php设置upload
<form method="post" action="upload.php" enctype="multipart/form-data">
<table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
<tr>
<td width=55 height=20 align="center"><input type="hidden" name="MAX_FILE_SIZE" value="2000000">文件: </TD>
<td height="16">
<input name="file" type="file" value="浏览" >
< input type="submit" value="上传" name="B1">
</td>
</tr>
</table>
</form>
<?php
/*****************************************
Title :文件上传详解
Author:leehui1983(辉老大)
Finish Date :2006-12-28
*****************************************/
$uploaddir = "./files/";//设置文件保存目录 注意包含/
$type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型
$patch="http://127.0.0.1/cr_downloadphp/upload/files/";//程序所在路径
//获取文件后缀名函数
function fileext($filename)
{
return substr(strrchr($filename, '.'), 1);
}
//生成随机文件名函数
function random($length)
{
$hash = 'CR-';
$chars = '';
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++)
{
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
$a=strtolower(fileext($_FILES['file']['name']));
//判断文件类型
if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type))
{
$text=implode(",",$type);
echo "您只能上传以下类型文件: ",$text,"<br>";
}
//生成目标文件的文件名
else{
$filename=explode(".",$_FILES['file']['name']);
do
{
$filename[0]=random(10); //设置随机数长度
$name=implode(".",$filename);
//$name1=$name.".Mcncc";
$uploadfile=$uploaddir.$name;
}
while(file_exists($uploadfile));
if (move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){
//输出图片预览
echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center><img src='$uploadfile'></center>";
echo"<br><center><a href='javascript:history.go(-1)'>继续上传</a></center>";
}
else{
echo "上传失败!";
}
}
}
?>
J. 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等格式的图片!";
}
}
?>