文件上传问题???请教!谢谢! 是版本的问题你在php.ini中把这个改一下.看看行不行.register_globals = on 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 修改后的submit.php你看看对不对.好象扩展名不对我再查一下.<?php$file_size_max = 1000000;$store_dir = "D:/Inetpub/wwwroot/upload/";$accept_overwrite = true;if ($_FILES['upload_file'][size] > $file_size_max) {echo "sorry!你的文件容量大于规定!";exit;}if (file_exists($store_dir . $_FILES['upload_file'][name]) && (!$accept_overwrite)) {echo "文件已经存在,不能再复制";exit;}if (!copy($_FILES['upload_file'][tmp_name],$store_dir . $_FILES['upload_file'][name])){echo "复制文件失败!";exit;}echo "上传文件完成!";?> 是高版本的问题你看看吧我这里已经可以了.你用这个看一下你也知道是怎么回事了.<?phpprint_r($_FILES['upload_file']);?>这是你在用copy时要用到的东东都在这里.因为你那个东东没有传过来值.所以你的copy不好使. 我用了<?phpprint_r($_FILES['upload_file']);?>可是没有任何反映呀?!register_globals = on已经打开!权限的问题,我已经给了upload文件夹everyone都完全控制了!!! 这样你在提交到的那页加一句.phpinfo();你看看有没有你提交的那个值他是什么样的.不可能取不出呀.我的那个程序运行也不行? 你的程序我没看.php.ini中是否允许上传,不知道你有没有打开. 对,你的那个程序也不行???我加了phpinfo();你要看哪一段?顺便问一句(如果你不介意的话):你是哪人?(我在湖南长沙) 我是这样看了:<?phpecho $HTTP_POST_VARS["upload_file"];exit;?>当时没有任何东西显示出来?我看可能是值没有传送过来,可是为什么呢??? 我允许上传呀!?;;;;;;;;;;;;;;;;; File Uploads ;;;;;;;;;;;;;;;;;; Whether to allow HTTP file uploads.file_uploads = On; Temporary directory for HTTP uploaded files (will use system default if not; specified).;upload_tmp_dir =; Maximum allowed size for uploaded files.upload_max_filesize = 2M php文档中上传文件的例程表单<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>注意,一定要有enctype="multipart/form-data",这是上传文件表单跟普通表单的区别。<?php // PHP 4.1.0 或以上, 可以用$_FILES 替代 $HTTP_POST_FILES.if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) { copy($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");} else { echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['userfile']['name'];}/* ...或者... */move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");?>这是两种保存上传文件的方法,因为php在页面文件执行完之后会将上传的临时文件删除。注意了上传的文件是以临时文件保存在硬盘上,因此文件名需用$HTTP_POST_FILES['userfile']['tmp_name']访问!而保存的文件名在copy或move_uploaded_file函数的第二个参数中指定。如果需要以原来文件名保存,请使用$HTTP_POST_FILES['userfile']['name']来取得原始的文件名。$HTTP_POST_FILES是一个多维数组,以便一次上传多个文件。进faq! 还有anziqi贴的程序里有点语法错:$_FILES['upload_file'][name]$_FILES['upload_file'][tmp_name],后一个下标少引号…… 根据你的错误提示,基本上确定是文件系统的权限设置。由于我使用的php4以上版本所以将你的程序精简为以下代码来说明问题--------------------------------------------------------------------<?$file_size_max = 1000000;$store_dir = "c:/";$accept_overwrite = true;($HTTP_POST_FILES['upload_file']);if (!copy($HTTP_POST_FILES['upload_file']['tmp_name'],$store_dir.'tmp.txt')){echo "复制文件失败!";exit;}echo "上传文件完成!";?><!--Copyright : Baby StudioEmail : [email protected]-->--------------------------------------------------------------------与文件权限冲突的地方可能存在于以下三个位置1. submit.php(呵呵,这个基本上排除)2. $store_dir(据你说已经检查过了)3. $tmp_name 现在看来,第三个位置是罪恶根源了,通常php会把上船的文件临时存在一个固定目录下,这个目录可以在php.ini中设置,我的win2000安装php4后的默认设置是C:\WINNT\TEMP\,所以你要确定你的web进程对这个临时目录有读、写、删除权限。鉴于此,比较好的解决方法是把php.ini中有关于此目录的设置改为你的web目录或者指定一个其它的目录进行相应授权。 更正:$tmp_name写法不对,因为它是一个数组$_FILES的索引 补充:刚刚再次看了php.ini的设置问题,我把upload_tmp_dir参数值改为C:\PHP\uploadtemp后发现使用$HTTP_POST_FILES['upload_file']['tmp_name']获得的临时文件存放位置仍然是目录C:\WINNT\TEMP\,设置无效的原因寻觅中。所以建议你把目录C:\WINNT\TEMP\的读写删除权限授给web进程执行用户,win2000系统中默认的WEB进程执行用户是 IUSR_主机名。 这个问题我遇到过。 原因是对上传图片写入的目录没有写入权限。 你可以通过ftp软件连接到你的站点内,然后对存入图片的目录设为可写目录。如果你不能对这个目录进行操作。可以新建一个目录。再对它进行权限控制!这个方法可行的。已通过调试的。 呵呵.一则你换个目录.别一则你加入写权限.to: luoxiang2000(腾空) 我是让你在phpinfo中看看有没有你传过来的变量.如你提交的图片名你是知道的.那么你在显示的页面中就可以看出他是怎么取这个变量的.你的程序一则是因为权限一个就是因为变量根本就没有取出所以你用看phpinfo可以判断出是否是跟变量有关.如不是就是权限.但有一个前提就是你必需是提交到的那页用phpinfo呀. 大伙是怎么来做测试的? 求高手!!帮忙估计下此页面共需执行多少条sql语句啊 图片上传,并存到数据库。。。 订单购物代码有问题 请教一条SQL apache+php+mssqlserver2000配置问题 第一次写的分页类 cookie的问题,为什么会有这种错? 有没有好一点的php代码编辑工具? 怎样去掉链接后面的临时SessionID号? 希望有高手指点。 哪位大侠有PNG转JPG 算法?
你看看对不对.好象扩展名不对我再查一下.
<?php
$file_size_max = 1000000;
$store_dir = "D:/Inetpub/wwwroot/upload/";
$accept_overwrite = true;if ($_FILES['upload_file'][size] > $file_size_max) {
echo "sorry!你的文件容量大于规定!";
exit;
}
if (file_exists($store_dir . $_FILES['upload_file'][name]) && (!$accept_overwrite)) {
echo "文件已经存在,不能再复制";
exit;
}
if (!copy($_FILES['upload_file'][tmp_name],$store_dir . $_FILES['upload_file'][name])){
echo "复制文件失败!";
exit;
}
echo "上传文件完成!";
?>
你用这个看一下你也知道是怎么回事了.<?php
print_r($_FILES['upload_file']);
?>
这是你在用copy时要用到的东东都在这里.因为你那个东东没有传过来值.
所以你的copy不好使.
print_r($_FILES['upload_file']);
?>
可是没有任何反映呀?!register_globals = on
已经打开!权限的问题,我已经给了upload文件夹everyone都完全控制了!!!
你看看有没有你提交的那个值他是什么样的.
不可能取不出呀.我的那个程序运行也不行?
我加了phpinfo();
你要看哪一段?
顺便问一句(如果你不介意的话):你是哪人?(我在湖南长沙)
<?php
echo $HTTP_POST_VARS["upload_file"];
exit;
?>
当时没有任何东西显示出来?
我看可能是值没有传送过来,可是为什么呢???
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
<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>
注意,一定要有enctype="multipart/form-data",这是上传文件表单跟普通
表单的区别。<?php
// PHP 4.1.0 或以上, 可以用$_FILES 替代 $HTTP_POST_FILES.
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
copy($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['userfile']['name'];
}
/* ...或者... */
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?>
这是两种保存上传文件的方法,因为php在页面文件执行完之后会
将上传的临时文件删除。
注意了上传的文件是以临时文件保存在硬盘上,因此文件名需用
$HTTP_POST_FILES['userfile']['tmp_name']访问!
而保存的文件名在copy或move_uploaded_file函数的第二个
参数中指定。如果需要以原来文件名保存,请使用
$HTTP_POST_FILES['userfile']['name']来取得原始的
文件名。
$HTTP_POST_FILES是一个多维数组,以便一次上传多个文件。进faq!
$_FILES['upload_file'][name]
$_FILES['upload_file'][tmp_name],
后一个下标少引号……
--------------------------------------------------------------------
<?
$file_size_max = 1000000;
$store_dir = "c:/";
$accept_overwrite = true;
($HTTP_POST_FILES['upload_file']);
if (!copy($HTTP_POST_FILES['upload_file']['tmp_name'],$store_dir.'tmp.txt')){
echo "复制文件失败!";
exit;
}
echo "上传文件完成!";
?>
<!--
Copyright : Baby Studio
Email : [email protected]
-->
--------------------------------------------------------------------与文件权限冲突的地方可能存在于以下三个位置
1. submit.php(呵呵,这个基本上排除)
2. $store_dir(据你说已经检查过了)
3. $tmp_name
现在看来,第三个位置是罪恶根源了,通常php会把上船的文件临时存在一个固定目录下,这个目录可以在php.ini中设置,我的win2000安装php4后的默认设置是C:\WINNT\TEMP\,所以你要确定你的web进程对这个临时目录有读、写、删除权限。鉴于此,比较好的解决方法是把php.ini中有关于此目录的设置改为你的web目录或者指定一个其它的目录进行相应授权。
刚刚再次看了php.ini的设置问题,我把upload_tmp_dir参数值改为C:\PHP\uploadtemp后发现使用$HTTP_POST_FILES['upload_file']['tmp_name']获得的临时文件存放位置仍然是目录C:\WINNT\TEMP\,设置无效的原因寻觅中。所以建议你把目录C:\WINNT\TEMP\的读写删除权限授给web进程执行用户,win2000系统中默认的WEB进程执行用户是 IUSR_主机名。
你可以通过ftp软件连接到你的站点内,然后对存入图片的目录设为可写目录。如果你不能对这个目录进行操作。可以新建一个目录。再对它进行权限控制!这个方法可行的。已通过调试的。
我是让你在phpinfo中看看有没有你传过来的变量.如你提交的图片名你是知道的.那么你在显示的页面中就可以看出他是怎么取这个变量的.你的程序一则是因为权限一个就是因为变量根本就没有取出所以你用看phpinfo可以判断出是否是跟变量有关.如不是就是权限.但有一个前提就是你必需是提交到的那页用phpinfo呀.