朋友让写一个上传文件的页面(用php实现),可是我不懂,那位好心的朋友帮帮忙啊 用copy()函数,如何使用参考php手册 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?phpif($upfile) {$filepath="d:\php\file"; $filename=$filepath.$upfile_name; copy($upfile,$filename); } else echo"上传失败";?> <form enctype="multipart/form-data" action="_URL_" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form><?php // In PHP earlier then 4.1.0, $HTTP_POST_FILES should be used instead of $_FILES. if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file"); } else { echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name']; } /* ...or... */ move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file"); ?> 我写的上传的函数,你看看吧function Upload($FileName,$Dir,$Str){ if(!eregi("(".$Str.")",$_FILES[$FileName]['type'])) { die("不是合法文件,<a href=javascript:history.go(-1)>返回</a>"); } else { $Time = date("YmdHis"); $Extend_Name = strchr($_FILES[$FileName]['name'],"."); $Up_File = $Time.$Extend_Name; if(is_dir($Dir)) { copy($_FILES[$FileName]['tmp_name'],$Dir."/".$Up_File); unlink($_FILES[$FileName]['tmp_name']); } return $Up_File; } } 各位兄台:能不能完整一些,怎样把这些函数片断嵌入html中阿 加入调入语句如<? 函数名称(参数) ?> 章 18. 文件上传处理目录POST 方法上传关于错误信息的解释一些注意事项上传多个文件对 PUT 方法的支持POST 方法上传PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,Microsoft Internet Explorer 3 加微软补丁,或者更高版本)上传的文件。PHP 的这种特性使得我们既可以上传文本文件,也可以上传二进制文件。利用 PHP 的认证和文件操作函数,您就可以控制谁有上传的权限,以及在文件上传后进行哪些处理。 相关的设置: 请参阅 php.ini 的 file_uploads、 upload_max_filesize、upload_tmp_dir 以及 post_max_size 设置选项。 请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。请参阅 PUT 方法支持以获取更多信息。 您可以如下建立一个特殊的表单来支持文件上传: 例子 18-1. 文件上传表单<form enctype="multipart/form-data" action="_URL_" method="POST"><input type="hidden" name="MAX_FILE_SIZE" value="30000">Send this file: <input name="userfile" type="file"><input type="submit" value="Send File"></form> 以上范例中的“_URL_”应该替换成指向一个 PHP 文件的真实 URL。MAX_FILE_SIZE 隐藏域(单位为字节)必须先于文件输入域,其值为接收文件的最大尺寸。同时,要保证您的文件上传表单中要有 enctype="multipart/form-data",否则文件上传将不能工作。 警告 MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。 为上传文件定义的变量会根据 PHP 的版本及设置的不同而不同。自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES。如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在。从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off。 以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。 $_FILES['userfile']['name']客户端机器文件的原名称。 $_FILES['userfile']['type']文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。 $_FILES['userfile']['size']已上传文件的大小,单位为字节。 $_FILES['userfile']['tmp_name']文件被上传后在服务端储存的临时文件名。 $_FILES['userfile']['error']和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。 注: 在 PHP 4.1.0 版本以前该数组的名称为 $HTTP_POST_FILES,它并不像 $_FILES 一样是自动全局变量。PHP 3 不支持 $HTTP_POST_FILES 数组。 当 php.ini 中的 register_globals 被设置为 on 时,您可以使用更多的变量。例如,$userfile_name 等价于 $_FILES['userfile']['name'],$userfile_type 等价于 $_FILES['userfile']['type'] 等。请记住从 PHP 4.2.0 开始,register_globals 的默认值为 off,因此我们建议您不要依赖于改设置项而使用刚刚提到的那些附加变量。 文件被上传后,默认地会被储存到服务端的默认临时目录中,除非您将 php.ini 中的 upload_tmp_dir 设置为了其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。 例子 18-2. 使文件上传生效请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。 <?php// 在 4.1.0 以前的 PHP 中,需要用 $HTTP_POST_FILES 代替 $_FILES。// 在 4.0.3 以前的 PHP 中,需要用 copy() 和 is_uploaded_file() 来代替 move_uploaded_file()。$uploaddir = '/var/www/uploads/';$uploadfile = $uploaddir. $_FILES['userfile']['name'];print "<pre>";if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) { print "File is valid, and was successfully uploaded. Here's some more debugging info:\n"; print_r($_FILES);} else { print "Possible file upload attack! Here's some debugging info:\n"; print_r($_FILES);}print "</pre>";?> 接受上传文件的 PHP 脚本必须在文件上传后进行判断,来决定接下来要对该文件进行那些操作。例如,您可以通过 $_FILES['userfile']['size'] 变量来忽略尺寸太大或太小的文件,也可以通过 $_FILES['userfile']['type'] 变量来过滤文件类型和某种标准不相符合的文件。在 PHP 4.2.0 以上版本,您还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来做相关的判断。不管做何种的判断,您必须将该文件从临时目录中删除,要么将其移动到其它的地方。 如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为 none。 如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。 关于错误信息的解释从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码。该代码可以在文件上传时生成的文件数组中的 ['error'] 字段中被找到,也就是 $_FILES['userfile']['error']。 UPLOAD_ERR_OK值:0; 没有错误发生,文件上传成功。 UPLOAD_ERR_INI_SIZE值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 UPLOAD_ERR_FORM_SIZE值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 UPLOAD_ERR_PARTIAL值:3; 文件只有部分被上传。 UPLOAD_ERR_NO_FILE值:4; 没有文件被上传。 注: 这些在 PHP 4.3.0 之后变成了 PHP 常量。 一些注意事项对 MAX_FILE_SIZE 设置的值,不能大于 ini 设置中 upload_max_filesize 选项设置的值。其默认值为 2M 字节。 如果内存限制设置被激活,您可能需要将 memory_limit 设置的更大些,请确认 memory_limit 的设置足够的大。 如果 max_execution_time 设置的值太小,脚本运行的时间可能会超过该设置。因此,也请保证 max_execution_time 足够的大。 注: max_execution_time 仅仅只影响脚本本身运行地时间。任何其它花费在脚本运行之外的时间,诸如用函数 system() 对系统的调用、sleep() 函数的使用、数据库查询、文件上传等,在计算脚本运行的最大时间时都不包括在内。 如果 post_max_size 设置的值太小,则较大的文件会无法被上传。因此,请保证 post_max_size 的值足够的大。 不使您操作的文件有效化,可能意味着用户能够访问其它目录下的敏感信息。 请注意 CERN httpd 似乎会丢弃它从客户端获得的 content-type mime 头信息中第一个空格后所有的内容,基于这一点,CERN httpd 不支持文件上传特性。 鉴于文件路径的表示方法有很多种,我们无法确保用使用各种外语的文件名(尤其是包含空格的)能够被正确的处理。 给你我写的一断//图片上传处理$upload_file=$_FILES['upload_file']['tmp_name'];echo $upload_file;$upload_file_name=$_FILES['upload_file']['name'];$type=strstr($upload_file_name, '.'); if($upload_file=="") { $newname="0.jpg"; } else { $newname=$newid.$type; }//$newname=$newid.$type;$intonew2="update mms_news_info set col_image='$newname' where col_id='$newid'";mysql_query($intonew2,$db);if($upload_file){$file_size_max = 1000*1000;// 1M限制文件上传最大容量(bytes)$store_dir = "neirongimg/";// 上传文件的储存位置$accept_overwrite = 1;//是否允许覆盖相同文件// 检查文件大小if ($upload_file_size > $file_size_max) {echo "对不起,你的文件容量大于规定";exit;}// 检查读写文件if (file_exists($store_dir . $upload_file_name) && $accept_overwrite) {Echo "存在相同文件名的文件";exit;}//复制文件到指定目录if (!move_uploaded_file($upload_file,$store_dir.$newname)) {echo "复制文件失败";exit;}}Echo "<p>你上传了文件:";echo $_FILES['upload_file']['name'];echo "<br>";//客户端机器文件的原名称。 Echo "文件的 MIME 类型为:";echo $_FILES['upload_file']['type'];//文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。 echo "<br>";Echo "上传文件大小:";echo $_FILES['upload_file']['size'];//已上传文件的大小,单位为字节。 echo "<br>";Echo "文件上传后被临时储存为:";echo $_FILES['upload_file']['tmp_name'];//文件被上传后在服务端储存的临时文件名。 echo "<br>";$Erroe=$_FILES['upload_file']['error'];switch($Erroe){ case 0: Echo "上传成功"; break; case 1: Echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值."; break; case 2: Echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; break; case 3: Echo "文件只有部分被上传";break; case 4: Echo "没有文件被上传";break;} //图片上传处理?> 试了各位的程序,提示如下,怎么解决阿?Possible file upload attack! 我用的版本是4.3.1.1,按各位的方法提示Possible file upload attack!,没有看到上传的文件,再次请教 MySQL的Update的使用 帮帮我这菜鸟 请教如何运行PHP网站 文件问题 php如何异步获得接口返回的数据 checkbox隐藏和显示 程序页面打开时乱码 在php中对流媒体课件网页进行计时问题 参数值不能传递 谁能提供一个全部用phplib开发的包括原代码的系统(60分全送上了) 招聘PHP开发人员(请版主手下留情) 做新闻系统,出现乱码问题:(
if($upfile)
{$filepath="d:\php\file";
$filename=$filepath.$upfile_name;
copy($upfile,$filename);
}
else
echo"上传失败";
?>
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
<?php
// In PHP earlier then 4.1.0, $HTTP_POST_FILES should be used instead of $_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
copy($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];
}
/* ...or... */
move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?>
function Upload($FileName,$Dir,$Str)
{
if(!eregi("(".$Str.")",$_FILES[$FileName]['type']))
{
die("不是合法文件,<a href=javascript:history.go(-1)>返回</a>");
}
else
{
$Time = date("YmdHis");
$Extend_Name = strchr($_FILES[$FileName]['name'],".");
$Up_File = $Time.$Extend_Name;
if(is_dir($Dir))
{
copy($_FILES[$FileName]['tmp_name'],$Dir."/".$Up_File);
unlink($_FILES[$FileName]['tmp_name']);
}
return $Up_File;
}
}
如<? 函数名称(参数) ?>
目录
POST 方法上传
关于错误信息的解释
一些注意事项
上传多个文件
对 PUT 方法的支持
POST 方法上传
PHP 能够接受任何来自符合 RFC-1867 标准的浏览器(包括 Netscape Navigator 3 及更高版本,Microsoft Internet Explorer 3 加微软补丁,或者更高版本)上传的文件。PHP 的这种特性使得我们既可以上传文本文件,也可以上传二进制文件。利用 PHP 的认证和文件操作函数,您就可以控制谁有上传的权限,以及在文件上传后进行哪些处理。 相关的设置: 请参阅 php.ini 的 file_uploads、 upload_max_filesize、upload_tmp_dir 以及 post_max_size 设置选项。 请注意 PHP 也支持 PUT 方法的文件上传,Netscape Composer 和 W3C 的 Amaya 客户端使用这种方法。请参阅 PUT 方法支持以获取更多信息。 您可以如下建立一个特殊的表单来支持文件上传: 例子 18-1. 文件上传表单<form enctype="multipart/form-data" action="_URL_" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
以上范例中的“_URL_”应该替换成指向一个 PHP 文件的真实 URL。MAX_FILE_SIZE 隐藏域(单位为字节)必须先于文件输入域,其值为接收文件的最大尺寸。同时,要保证您的文件上传表单中要有 enctype="multipart/form-data",否则文件上传将不能工作。
警告
MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。
为上传文件定义的变量会根据 PHP 的版本及设置的不同而不同。自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这些数组将包含所有关于您上传的文件的信息,其中,我们推荐您使用 $_FILES。如果 PHP 的设置选项 register_globals 为 on,则相关的变量名将也会存在。从 PHP 4.2.0 版本开始,register_globals 的默认值被设为 off。 以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为 userfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。 $_FILES['userfile']['type']
文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。 $_FILES['userfile']['size']
已上传文件的大小,单位为字节。 $_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。 $_FILES['userfile']['error']
和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。
注: 在 PHP 4.1.0 版本以前该数组的名称为 $HTTP_POST_FILES,它并不像 $_FILES 一样是自动全局变量。PHP 3 不支持 $HTTP_POST_FILES 数组。 当 php.ini 中的 register_globals 被设置为 on 时,您可以使用更多的变量。例如,$userfile_name 等价于 $_FILES['userfile']['name'],$userfile_type 等价于 $_FILES['userfile']['type'] 等。请记住从 PHP 4.2.0 开始,register_globals 的默认值为 off,因此我们建议您不要依赖于改设置项而使用刚刚提到的那些附加变量。 文件被上传后,默认地会被储存到服务端的默认临时目录中,除非您将 php.ini 中的 upload_tmp_dir 设置为了其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。 例子 18-2. 使文件上传生效请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。 <?php
// 在 4.1.0 以前的 PHP 中,需要用 $HTTP_POST_FILES 代替 $_FILES。
// 在 4.0.3 以前的 PHP 中,需要用 copy() 和 is_uploaded_file() 来代替 move_uploaded_file()。$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir. $_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
print "File is valid, and was successfully uploaded. Here's some more debugging info:\n";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info:\n";
print_r($_FILES);
}
print "</pre>";
?>
接受上传文件的 PHP 脚本必须在文件上传后进行判断,来决定接下来要对该文件进行那些操作。例如,您可以通过 $_FILES['userfile']['size'] 变量来忽略尺寸太大或太小的文件,也可以通过 $_FILES['userfile']['type'] 变量来过滤文件类型和某种标准不相符合的文件。在 PHP 4.2.0 以上版本,您还可以通过 $_FILES['userfile']['error'] 变量来根据不同的错误代码来做相关的判断。不管做何种的判断,您必须将该文件从临时目录中删除,要么将其移动到其它的地方。 如果表单中没有选择上传的文件,则 PHP 变量 $_FILES['userfile']['size'] 的值将为 0,$_FILES['userfile']['tmp_name'] 将为 none。 如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。
从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码。该代码可以在文件上传时生成的文件数组中的 ['error'] 字段中被找到,也就是 $_FILES['userfile']['error']。 UPLOAD_ERR_OK
值:0; 没有错误发生,文件上传成功。 UPLOAD_ERR_INI_SIZE
值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 UPLOAD_ERR_FORM_SIZE
值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上传。 UPLOAD_ERR_NO_FILE
值:4; 没有文件被上传。
注: 这些在 PHP 4.3.0 之后变成了 PHP 常量。
对 MAX_FILE_SIZE 设置的值,不能大于 ini 设置中 upload_max_filesize 选项设置的值。其默认值为 2M 字节。 如果内存限制设置被激活,您可能需要将 memory_limit 设置的更大些,请确认 memory_limit 的设置足够的大。 如果 max_execution_time 设置的值太小,脚本运行的时间可能会超过该设置。因此,也请保证 max_execution_time 足够的大。 注: max_execution_time 仅仅只影响脚本本身运行地时间。任何其它花费在脚本运行之外的时间,诸如用函数 system() 对系统的调用、sleep() 函数的使用、数据库查询、文件上传等,在计算脚本运行的最大时间时都不包括在内。 如果 post_max_size 设置的值太小,则较大的文件会无法被上传。因此,请保证 post_max_size 的值足够的大。 不使您操作的文件有效化,可能意味着用户能够访问其它目录下的敏感信息。 请注意 CERN httpd 似乎会丢弃它从客户端获得的 content-type mime 头信息中第一个空格后所有的内容,基于这一点,CERN httpd 不支持文件上传特性。 鉴于文件路径的表示方法有很多种,我们无法确保用使用各种外语的文件名(尤其是包含空格的)能够被正确的处理。
//图片上传处理
$upload_file=$_FILES['upload_file']['tmp_name'];
echo $upload_file;
$upload_file_name=$_FILES['upload_file']['name'];
$type=strstr($upload_file_name, '.');
if($upload_file=="")
{
$newname="0.jpg";
}
else
{
$newname=$newid.$type;
}
//$newname=$newid.$type;$intonew2="update mms_news_info set col_image='$newname' where col_id='$newid'";
mysql_query($intonew2,$db);if($upload_file){
$file_size_max = 1000*1000;// 1M限制文件上传最大容量(bytes)
$store_dir = "neirongimg/";// 上传文件的储存位置
$accept_overwrite = 1;//是否允许覆盖相同文件
// 检查文件大小
if ($upload_file_size > $file_size_max) {
echo "对不起,你的文件容量大于规定";
exit;
}// 检查读写文件
if (file_exists($store_dir . $upload_file_name) && $accept_overwrite) {
Echo "存在相同文件名的文件";
exit;
}//复制文件到指定目录
if (!move_uploaded_file($upload_file,$store_dir.$newname)) {
echo "复制文件失败";
exit;
}}Echo "<p>你上传了文件:";
echo $_FILES['upload_file']['name'];
echo "<br>";
//客户端机器文件的原名称。 Echo "文件的 MIME 类型为:";
echo $_FILES['upload_file']['type'];
//文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
echo "<br>";Echo "上传文件大小:";
echo $_FILES['upload_file']['size'];
//已上传文件的大小,单位为字节。
echo "<br>";Echo "文件上传后被临时储存为:";
echo $_FILES['upload_file']['tmp_name'];
//文件被上传后在服务端储存的临时文件名。
echo "<br>";
$Erroe=$_FILES['upload_file']['error'];
switch($Erroe){
case 0:
Echo "上传成功"; break;
case 1:
Echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值."; break;
case 2:
Echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; break;
case 3:
Echo "文件只有部分被上传";break;
case 4:
Echo "没有文件被上传";break;
} //图片上传处理?>
Possible file upload attack!