php学习笔记(五)
1.实在是郁闷,昨天花了4个小时来研究php的文件上传。想实现的功能是:能根据上传者的部门,及上传文件分属哪个活动,直接将这些文件归类到不同文件夹。
2.首先的难题出现在如何建立一个目录?………表笑,大多文章都讲了如何向某一目录上传,偏偏不说怎么向某一不存在的目录上传………最后在G的过程中发现了一篇文章,看到了mkdir这个函数,马上php手册一下,明白了它的用法。将之搬至程序中,噩梦开始了。。。。
3.说一下目录结构:/uploads/$dep/$name/ 读取cookie中的dep_id来填充$dep,读取url过来的pro_name来填充$name。然后mkdir(/uploads/$dep/$name/)。结果页面空白,uploads目录下也没反应。………………这中间的尝试不想再提了,遇到过类似问题的朋友都清楚那种感觉。现在讲关键的一步,我试着简化一下:mkdir(/uploads/$dep/),本来初衷是觉得可能$name在传输过程中出了问题,所以减去它,谁知道这下成功了!然后有点感觉了,将$name再加上去,[wink]成功了,/uploads/$dep/$name/ 建立成功!虽然没搞懂原因,但还是很兴奋的。赶紧换了几个$name测试,都成功了。正高兴呢,就换了个$dep,结果又不行了…………经过反复测试,发现mkdir()函数只能在当前以存在的目录下建立目录,也就是说一次只能建一级目录,当$dep/不确定时,$name/也就无法建立。so 解决方法出来了,比较笨,不知道还有没有好点的方法:
[code]$dep = $_COOKIE['dep_id'];
$name = $_GET['pro_name'];
$dir1 = “../uploads/$dep/”;
$dir2 = “../uploads/$dep/$name/”;
if (!is_dir($dir2)) //判断是否存在该目录
{
mkdir(”$dir1″);
mkdir(”$dir2″);
}
$uploadfile = $dir2 . basename($_FILES['userfile']['name']);[/code]
4.在解决这个问题的过程中还了解了php对于字符串是如何解析的。单引号”直接输出里面的内容,eg: 将‘$dep’输出:$dep,而双引号”"可以自动解析里面的变量等等,eg: 将”$dep”输出:组织部。
5.程序中用到的is_dir()函数在使用过程中出了个很奇怪的问题,不知道是否是BUG。当时为了监视is_dir()的值,用$a指向它,然后输出$a的值,结果在is_dir()为TRUE时,$a能正常输出1,但是在函数为FALSE时,页面上却无任何输出。但是用var_dump(is_dir())却能正确输出FALSE。不知道是否和php对逻辑变量的定义有关。有空再去看看资料吧。
与此文相关的日志
此篇日志属于 原创分类. 并被标记有以下标签: php, 学习. 你可以通过这个链接来订阅本文的评论: RSS 2.0. 你可以 留言, 或者在你的日志里 trackback 此篇日志
< ?php
$full_path="../uploads/$dep/$name/";
$path_array = explode("/",$full_path);
$path='';
foreach ($path_array as $path_string)
{
if (!empty($path_string) && !is_dir($path_string))
{
$path .= $path_string."/";
mkdir($path);
}
}
?>
[回应此评论]
上一个版本有问题
< ?php
$full_path="../uploads/$dep/$name/";
$path_array = explode("/",$full_path);
$path='';
foreach ($path_array as $path_string)
{
if (!empty($path_string))
{
$path .= $path_string."/";
if (!is_dir($path_string))
{
mkdir($path);
}
}
}
?>
[回应此评论]
在PHP里,对变量类型处理很不严格。
很多时候false ==''==0
所以如果为false,输出就是空的
想看BOOL结果,还是用IF判断或者var_dump吧
[回应此评论]
中文的文件名在gb2312是成功的,不知你在utf8编码下建立文件名为中文的文件是否成功?
我在本机win上测试的时候不行,上传到服务器linux也不行,难道和机器的语言有关?
[回应此评论]