关于上传的一段代码 ,大家看一下。提提意见。留言的都有分。紧急!!!在线等待

datastore 2003-10-21 04:00:30
代码如下: 测试过程中,在本计算机上是没有问题的.现在是本地计算机的文件要上传到服务器上,结果就不能用了. 其中$uploadPicture_size=filesize($uploadPicture); 的值 为false. 怎么来解决这个上传到服务器上? 如果服务器和客户端在一台计算机上是可以用的。帮忙修改下 能上传到服务器。

<?
//输入参数:$dir_for_image = =..\files\ $uploadPicture=C:\\ipconfig.txt $tomask=Array
function uploadfile($dir_for_image,$uploadPicture,$tomask)
{
global $uploadPicture,$tomask,$uploadPicture_name,$uploadPicture_size;


$uploadPicture_name=basename($uploadPicture);
$uploadPicture_size=filesize($uploadPicture);
//echo $uploadPicture_name;
if (!$uploadPicture_size)
{$uploadPicture_size = 1;}
//设置通配符mask; //计算有几个通配符;
$num_mask=count($tomask);
if ($uploadPicture_size&&$uploadPicture_name!="")
{

$file=$dir_for_image.$uploadPicture_name;

$length_uploadFile_name=strlen($uploadPicture_name);//当前上传文件名的长度;
$extension_uploadFile_name=substr($uploadPicture_name,$length_uploadFile_name-3,$length_uploadFile_name-1);

for ($i=1;$i<=$num_mask;$i++)
{
if ($extension_uploadFile_name==current($tomask))
{ echo "<table align=center border=1 bordercolor=pink cellspacing=0><tr class=text2 align=center><td>禁止上传此类文件!</td></tr>"; return 0; }
next($tomask);
}
///检查当前要上传的目录里是否有同名文件;
if(file_exists($file))
{ echo "<table align=center border=1 bordercolor=pink cellspacing=0><tr class=text2 align=center><td>同名文件存在,不能上传!</td></tr>" ; return 0; }
else
{ if (!copy($uploadPicture,$file))
{ echo "文件拷贝出错!<br>"; return 0; }
else
{

return 1;
}
}
}
else
{ echo "<table align=center border=1 bordercolor=pink cellspacing=0><tr class=text2 align=center><td>文件名不能为空,或者文件大小不能为零!</td></tr>";
return 0; }
}
?>
...全文
46 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
datastore 2003-10-25
  • 打赏
  • 举报
回复
他说很多程序放到上面都是可以的。为什么我们的不行。都这么说我们,说我们必须找出一个原因来才能修改。难道是路径不对吗? 可是同样的路径 我放到windows中就是可以的。在windows下路径是对的。既然能上传到临时文件夹 ,怎么就不能复制到需要的文件夹呢?我对linux一窍不通, 见笑了。所以不清楚这些问题。
datastore 2003-10-24
  • 打赏
  • 举报
回复
源文件是:/tmp/phpHQyBeD 目标文件是:files/flash441.htm 文件 move_uploaded_file源,目标, 没有成功!

源:/tmp/phpUp12cf
目标:upload/flash441.htm

上面的是我的没有成功,下面的是你的成功了
说明与函数没有关系了,与设置有关系,可是可能是与什么设置有关系呢?
因为在windows下是可以的。搞不懂!
ustb 2003-10-24
  • 打赏
  • 举报
回复
我把源和目标都echo 出来了,你去看看吧.
datastore 2003-10-24
  • 打赏
  • 举报
回复
你说的这个地方根本就不对。我没有设置,说明是放到默认目录下了。并不是一定要设置的。这个地方我在windows中试验过的,不用设置就可以的。况且我在linux下能检测到文件的存在,说明已经上传上去了 。源文件目标文件我都显示出来了。

大家可以去http://lycos58623.l97.lycos.com.cn/test.php 这里试验一下。
if(!is_uploaded_file($uploadPicture['tmp_name']))
echo " 文件不存在 ";
echo "源文件是:".$uploadPicture['tmp_name']." 目标文件是:".$file;
////if (!copy($uploadPicture['tmp_name'],$file))
if (!move_uploaded_file($uploadPicture['tmp_name'],$file))
{
echo " 文件 move_uploaded_file源,目标, 没有成功!<br>";
return 0;
}
okdw 2003-10-24
  • 打赏
  • 举报
回复
你的配置对吗?自己看看对不对!!

; 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
这里的配置都与这个现象不符合。说明这里的配置都是正确的。
datastore 2003-10-24
  • 打赏
  • 举报
回复
允许上传的,现在修改里面的文件我都是用FTP上传的。
ustb 2003-10-24
  • 打赏
  • 举报
回复
你的空间是否允许你上传?问一下你的空间商。
ustb 2003-10-23
  • 打赏
  • 举报
回复
print_r一下你的参数,设置断言分段调试。
hntd 2003-10-23
  • 打赏
  • 举报
回复
UP一下
ustb 2003-10-23
  • 打赏
  • 举报
回复
如果不成功,那把所有的判断全部注释,只写一个上传函数,随便找个文件传传,如果还是不成功,那么就一定是配置的问题了。
datastore 2003-10-23
  • 打赏
  • 举报
回复
现在用到的的代码是昨天晚上你发的。代码,除了动了路径$dir_name = "upload/";之外,其他都没有动。不知道为什么总是传输不成功。函数的代码我可以再贴一下,仅仅把copy改变了.
如果这些都没有问题的话,可能是和设置有关系了.可是关于php.ini的设置 我已经设置了。我也发了上去了。
<?
function uploadfile($dir_for_image,$uploadPicture,$tomask)
{
global $uploadPicture,$tomask,$uploadPicture_name,$uploadPicture_size;
print_r($uploadPicture);
$uploadPicture_name = $uploadPicture['name'];
$uploadPicture_size = filesize($uploadPicture['tmp_name']);

if (!$uploadPicture_size)
{
$uploadPicture_size = 1;
}

//设置通配符mask; //计算有几个通配符;
$num_mask=count($tomask);
if ($uploadPicture_size&&$uploadPicture_name!="")
{
$file=$dir_for_image.$uploadPicture_name;

$length_uploadFile_name=strlen($uploadPicture_name);//当前上传文件名的长度;
$extension_uploadFile_name=substr($uploadPicture_name,$length_uploadFile_name-3,$length_uploadFile_name-1);
for ($i=1;$i<=$num_mask;$i++)
{
if ($extension_uploadFile_name==current($tomask))
{
echo "<table align=center border=1 bordercolor=pink cellspacing=0><tr class=text2 align=center><td>禁止上传此类文件!</td></tr>";
return 0;
}
next($tomask);
}

//检查当前要上传的目录里是否有同名文件;
if(file_exists($file))
{
echo "<table align=center border=1 bordercolor=pink cellspacing=0><tr class=text2 align=center><td>同名文件存在,不能上传!</td></tr>" ;
return 0;
}
else
{ echo "uploadPicture = ".$uploadPicture['tmp_name']." file= ".$file;
$resouce = '/tmp/'.$uploadPicture_name;
echo ' resouce = '.$resouce;
if(!is_uploaded_file($uploadPicture['tmp_name']))
echo " 文件不存在 ";
else
echo " 文件存在 ";
//if (!copy($uploadPicture['tmp_name'],$file))
if (!move_uploaded_file($uploadPicture['tmp_name'],$file))
{
echo "文件拷贝出错!<br>";
return 0;
}
else
{
echo "文件拷贝成功!<br>";
return 1;
}
}
}
else
{
echo "<table align=center border=1 bordercolor=pink cellspacing=0><tr class=text2 align=center><td>文件名不能为空,或者文件大小不能为零!</td></tr>";
return 0;
}
}
datastore 2003-10-23
  • 打赏
  • 举报
回复
( [name] => win2000命令全集.txt [type] => text/plain [tmp_name] => /tmp/phppZiDTN [error] => 0 [size] => 9976 )
ustb 2003-10-23
  • 打赏
  • 举报
回复
在function里加上一句print_r($uploadPicture);看一下,告诉结果。
datastore 2003-10-23
  • 打赏
  • 举报
回复
uploadPicture = C:\WINNT\TEMP\php17.tmp
file= files/win2000命令全集.txt
如果在我自己的计算机上
move_uploaded_file($uploadPIcture,$file)
这样就是成功的。
为什么刚才的就是失败的呢?
datastore 2003-10-23
  • 打赏
  • 举报
回复
当然这里我就是把原来的copy 换成了move_uploaded_file了。
datastore 2003-10-23
  • 打赏
  • 举报
回复
是的, 你的代码是没有问题的。在我的计算机上也通过了。但是在win2000 对方的服务器是UNIX下是没有通过的。
uploadPicture = /tmp/phppvF787 file= /home/qlky1csossv5g8v682l3/wwwroot/files/win2000命令全集.txt
move_uploaded_file($uploadPIcture,$file)
这样也是没有成功, 反回值是false

$uploadPIcture用 is_uploaded_file($uploadPIcture) true
ustb 2003-10-23
  • 打赏
  • 举报
回复
你所说的名字改变的问题那是肯定的,因为$uploadPicture只是临时文件,系统为了标识,所以将其改了名,我说过,最好用$_FILES[]数组来进行变量的取得,如果阁下非要直接传递,那我也没有办法了。
今天早上到服务器上进行了测试,测试地址(http://www.trustbbs.com/uptest.php,只保留到今天中午--2003.10.23),我的代码没有问题。如果我的代码在你的机器上不能通过,那么请检查你的php.ini的设置。
copy函数没有move_uploaded_file安全,最好别用。
datastore 2003-10-23
  • 打赏
  • 举报
回复
这里的错误提示,我没法帖出来,因为PHP.ini文件在对方的计算机里。我没有权限去修改。
datastore 2003-10-23
  • 打赏
  • 举报
回复
现在的一个问题是,当执行完这个form后,点了上传后'$uploadPicture' 就变成了/tmp/phpCEZtLR ,并且存在。我想知道上传后,为什么文件的名字发生变化了? 服务器是UNIX。而本地计算机上传到临时目录没有发生变化的。这里大家也可以看一下ustb(偶然) 的代码,他的代码也是遇到这么一个问题。是因为设置有问题吗? 还是代码的问题?敬请高手指点。

echo "<form method='post' action='$PHP_SELF?Folder_ID=$Folder_ID' ENCTYPE='multipart/form-data'>";


echo "<table align=center border=1 bordercolor=pink cellspacing=0>";

echo "<tr><td class=text2>上传</td>";

echo "<td><input class=input type='hidden' name='MAX_FILE_SIZE' value=4096000>";//设置最大可以上传的文件大小

echo "<input class=form TYPE='file' name='uploadPicture' size=20></td></tr>"; //2M图片上传

echo "</table><table align=center border=0><tr><td>";

echo "<input class=input type=submit name='upit' value='上传'></td></tr></table>";
datastore 2003-10-23
  • 打赏
  • 举报
回复
;;;;;;;;;;;;;;;;
; 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
这里的配置都与这个现象不符合。说明这里的配置都是正确的。
加载更多回复(22)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧