php中的move_uploaded_file()函数问题
各位达人这是我模仿书上的一个PHP程序,但是出了问题,主要是move_uploaded_file()这个函数。无论怎么样move_uploaded_file($_FILE...
各位达人这是我模仿书上的一个PHP程序,但是出了问题,主要是move_uploaded_file()这个函数。无论怎么样move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name'])这一段结果总是为0,也就是FALSE.导致每次输出的$evernt总是失败。也就是上传失败。
高人们,程序主体运行没有错,主要是这个函数的问题与$location="./temp/"这个位置到底是指电脑的哪个文件搞不懂。跪谢。
<?php
if(isset($_POST['set'])){
$number=$_POST['number'];}
else {
$number=5;}
$max_size=1000000;
$location="./temp/";
?>
<center>
文件上传系统</center>
<?php if(!isset($_POST['upload'])){ ?>
<form action="upload.php" method="post">
<table width="635">
<tr> <td width="100%"><b>上传文件数</b></td></tr>
<tr><td><input name="number" type="text" id="number" value="<?php echo $number?>" >
<input name="set" type="submit" id="set" value="设置" >
你可以设置上传的文件数
</td></tr></table>
</form>
<form method="post" enctype="multipart/form-data" action="upload.php" >
<table width="635" >
<tr><td>文件上传</td></tr>
<tr>
<td width="100%" ><table border="0" width="100%" cellpadding="4"><tr>
<td width="30%">选择上传文件</td>
<td width="70%" >
<input type="hidden" name="MAX_FILE_SIZE" size="5200000">
<?php
for($count=1;$count<$number+1;$count++){
echo '<input type="file" name="upload'.$count.'" size=29><BR>';
}
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
<input type=hidden name=number value="<?php echo $number; ?>">
<input type="submit" value="开始上载" name="upload">
</form>
<?php
} else { ?>
<table width="674">
<tr>
<td width="100%">
文件上传信息</td>
</tr>
<Tr>
<td width="100%" >
<table border="0" width="100%" cellspacing="3" cellpadding="6">
<tr>
<td width="25%" >文件名</td>
<td width="25%" >大小</td>
<td width="25%" >类型</td>
<td width="25%" >状态</td>
</tr>
<?php
for($num=1;$num<$_POST['number']+1;$num++){
$evernt="success";
if(!$_FILES['upload'.$num]['name']==""){
if($_FILES['upload'.$num]['size']<$max_size){
echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];
move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event="Failure";
}
else{
$event="File too large";
}
echo "<tr>";
echo "<td width=25%>".$_FILES['upload'.$num]['name']."</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['size']."bytes</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['type']."</td>";
echo "<td width=25%>".$event."</td>";
echo "</tr>";
}
}
?>
</table>
</td>
</Tr>
</table>
<a href="upload.php">上传更多文件</a>;
</center>
<?php } ?>
谢谢哈 展开
高人们,程序主体运行没有错,主要是这个函数的问题与$location="./temp/"这个位置到底是指电脑的哪个文件搞不懂。跪谢。
<?php
if(isset($_POST['set'])){
$number=$_POST['number'];}
else {
$number=5;}
$max_size=1000000;
$location="./temp/";
?>
<center>
文件上传系统</center>
<?php if(!isset($_POST['upload'])){ ?>
<form action="upload.php" method="post">
<table width="635">
<tr> <td width="100%"><b>上传文件数</b></td></tr>
<tr><td><input name="number" type="text" id="number" value="<?php echo $number?>" >
<input name="set" type="submit" id="set" value="设置" >
你可以设置上传的文件数
</td></tr></table>
</form>
<form method="post" enctype="multipart/form-data" action="upload.php" >
<table width="635" >
<tr><td>文件上传</td></tr>
<tr>
<td width="100%" ><table border="0" width="100%" cellpadding="4"><tr>
<td width="30%">选择上传文件</td>
<td width="70%" >
<input type="hidden" name="MAX_FILE_SIZE" size="5200000">
<?php
for($count=1;$count<$number+1;$count++){
echo '<input type="file" name="upload'.$count.'" size=29><BR>';
}
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
<input type=hidden name=number value="<?php echo $number; ?>">
<input type="submit" value="开始上载" name="upload">
</form>
<?php
} else { ?>
<table width="674">
<tr>
<td width="100%">
文件上传信息</td>
</tr>
<Tr>
<td width="100%" >
<table border="0" width="100%" cellspacing="3" cellpadding="6">
<tr>
<td width="25%" >文件名</td>
<td width="25%" >大小</td>
<td width="25%" >类型</td>
<td width="25%" >状态</td>
</tr>
<?php
for($num=1;$num<$_POST['number']+1;$num++){
$evernt="success";
if(!$_FILES['upload'.$num]['name']==""){
if($_FILES['upload'.$num]['size']<$max_size){
echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];
move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event="Failure";
}
else{
$event="File too large";
}
echo "<tr>";
echo "<td width=25%>".$_FILES['upload'.$num]['name']."</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['size']."bytes</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['type']."</td>";
echo "<td width=25%>".$event."</td>";
echo "</tr>";
}
}
?>
</table>
</td>
</Tr>
</table>
<a href="upload.php">上传更多文件</a>;
</center>
<?php } ?>
谢谢哈 展开
5个回答
展开全部
你的程序也太乱了
请注意你的程序的规范
你所说的$location="./temp/"这个是指在当前目录下的temp目录
也就是和你的upload.php同级的
我给你把程序修改了下,你再看看吧
<?php
header("Content-Type:text/html; charset=gb2312;");
if(isset($_POST['set'])) $number=$_POST['number'];
else $number=5;
$max_size=1000000;
if(! is_dir("./temp/"))
{
mkdir("./temp/");
@chmod("./temp/",777);
}
$location="./temp/";
?>
<center>
文件上传系统</center>
<?php if(!isset($_POST['upload'])){ ?>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table width="635">
<tr> <td width="100%"><b>上传文件数</b></td></tr>
<tr><td><input name="number" type="text" id="number" value="<?php echo $number?>" >
<input name="set" type="submit" id="set" value="设置" >
你可以设置上传的文件数
</td></tr></table>
</form>
<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" >
<table width="635" >
<tr><td>文件上传</td></tr>
<tr>
<td width="100%" ><table border="0" width="100%" cellpadding="4"><tr>
<td width="30%">选择上传文件</td>
<td width="70%" >
<input type="hidden" name="MAX_FILE_SIZE" size="5200000">
<?php
for($count=1;$count<$number+1;$count++){
echo '<input type="file" name="upload'.$count.'" size=29><BR>';
}
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
<input type=hidden name=number value="<?php echo $number; ?>">
<input type="submit" value="开始上载" name="upload">
</form>
<?php
} else { ?>
<table width="674">
<tr>
<td width="100%">
文件上传信息</td>
</tr>
<Tr>
<td width="100%" >
<table border="0" width="100%" cellspacing="3" cellpadding="6">
<tr>
<td width="25%" >文件名</td>
<td width="25%" >大小</td>
<td width="25%" >类型</td>
<td width="25%" >状态</td>
</tr>
<?php
for($num=1;$num<$_POST['number']+1;$num++)
{
$evernt="success";
if(!$_FILES['upload'.$num]['name']=="")
{
if($_FILES['upload'.$num]['size']<$max_size)
{
echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];
move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event="Failure";
}
else{
$event="File too large";
}
echo "<tr>";
echo "<td width=25%>".$_FILES['upload'.$num]['name']."</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['size']."bytes</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['type']."</td>";
echo "<td width=25%>".$event."</td>";
echo "</tr>";
}
}
?>
</table>
</td>
</Tr>
</table>
<a href="<?php echo $PHP_SELF; ?>">上传更多文件</a>;
</center>
<?php } ?>
请注意你的程序的规范
你所说的$location="./temp/"这个是指在当前目录下的temp目录
也就是和你的upload.php同级的
我给你把程序修改了下,你再看看吧
<?php
header("Content-Type:text/html; charset=gb2312;");
if(isset($_POST['set'])) $number=$_POST['number'];
else $number=5;
$max_size=1000000;
if(! is_dir("./temp/"))
{
mkdir("./temp/");
@chmod("./temp/",777);
}
$location="./temp/";
?>
<center>
文件上传系统</center>
<?php if(!isset($_POST['upload'])){ ?>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table width="635">
<tr> <td width="100%"><b>上传文件数</b></td></tr>
<tr><td><input name="number" type="text" id="number" value="<?php echo $number?>" >
<input name="set" type="submit" id="set" value="设置" >
你可以设置上传的文件数
</td></tr></table>
</form>
<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" >
<table width="635" >
<tr><td>文件上传</td></tr>
<tr>
<td width="100%" ><table border="0" width="100%" cellpadding="4"><tr>
<td width="30%">选择上传文件</td>
<td width="70%" >
<input type="hidden" name="MAX_FILE_SIZE" size="5200000">
<?php
for($count=1;$count<$number+1;$count++){
echo '<input type="file" name="upload'.$count.'" size=29><BR>';
}
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
<input type=hidden name=number value="<?php echo $number; ?>">
<input type="submit" value="开始上载" name="upload">
</form>
<?php
} else { ?>
<table width="674">
<tr>
<td width="100%">
文件上传信息</td>
</tr>
<Tr>
<td width="100%" >
<table border="0" width="100%" cellspacing="3" cellpadding="6">
<tr>
<td width="25%" >文件名</td>
<td width="25%" >大小</td>
<td width="25%" >类型</td>
<td width="25%" >状态</td>
</tr>
<?php
for($num=1;$num<$_POST['number']+1;$num++)
{
$evernt="success";
if(!$_FILES['upload'.$num]['name']=="")
{
if($_FILES['upload'.$num]['size']<$max_size)
{
echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];
move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event="Failure";
}
else{
$event="File too large";
}
echo "<tr>";
echo "<td width=25%>".$_FILES['upload'.$num]['name']."</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['size']."bytes</td>";
echo "<td width=25%>".$_FILES['upload'.$num]['type']."</td>";
echo "<td width=25%>".$event."</td>";
echo "</tr>";
}
}
?>
</table>
</td>
</Tr>
</table>
<a href="<?php echo $PHP_SELF; ?>">上传更多文件</a>;
</center>
<?php } ?>
展开全部
首先复习一下基础
move_uploaded_file — 将上传的文件移动到新位置
说明
bool move_uploaded_file ( string $filename, string $destination )
本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。
如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 FALSE。
如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。
这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。
$location在前面定义了 ./temp/
在php中
./表示当前目录
../表示上级目录
./temp表示当前目录里的temp目录
注意该目录不能为只读模式,还要注意,在win2003和xp\vista中,设置该文件夹的权限,添加一个everyone用户(拥有全部权限包括读写和列表)
建议你去掉后面的or $event="Failure"(不要去掉分号),根据文档
-------------------------------------------
如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。
----------------------------------------------
你就可以根据这条警告获得你的错误原因,前提是你没在程序里或php.ini里设置屏蔽warning
如果是新手学习,不建议屏蔽warning,这样会获得更多的调试信息和程序优化建议.除非你对改语言已经非常熟悉,则可以屏蔽
move_uploaded_file — 将上传的文件移动到新位置
说明
bool move_uploaded_file ( string $filename, string $destination )
本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。
如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 FALSE。
如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。
这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。
$location在前面定义了 ./temp/
在php中
./表示当前目录
../表示上级目录
./temp表示当前目录里的temp目录
注意该目录不能为只读模式,还要注意,在win2003和xp\vista中,设置该文件夹的权限,添加一个everyone用户(拥有全部权限包括读写和列表)
建议你去掉后面的or $event="Failure"(不要去掉分号),根据文档
-------------------------------------------
如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。
----------------------------------------------
你就可以根据这条警告获得你的错误原因,前提是你没在程序里或php.ini里设置屏蔽warning
如果是新手学习,不建议屏蔽warning,这样会获得更多的调试信息和程序优化建议.除非你对改语言已经非常熟悉,则可以屏蔽
参考资料: www.php.net
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$location="./temp/";是指当前程序的目录的下级目录temp
如果有目录temp了,还要注意temp是否具有可写权限。
如果有目录temp了,还要注意temp是否具有可写权限。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上传文件的表单必须这么写
<form name="form1" enctype="multipart/form-data" method="post" action="">
<input type="file" name="file" />
</form>
<form name="form1" enctype="multipart/form-data" method="post" action="">
<input type="file" name="file" />
</form>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$_SERVER['DOCUMENT_ROOT'] . '/test'
这样可以传到根目录下的test目录里。。。这样写没有问题,应该是。。。
还有权限问题,目录是否存在的问题
这样可以传到根目录下的test目录里。。。这样写没有问题,应该是。。。
还有权限问题,目录是否存在的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询