I noticed that this function will only attempt to create the last directory in the path, so mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) { $dirs = explode("\\",realpath($path)); $path = $dirs[0]; for($i = 1;$i < count($dirs);$i++) { $path .= "/".$dirs[$i]; if(!is_dir($path)) mkdir($path,$mode); } }Note: I wrote this on windows, where realpath starts with x:\ (x being drive letter) 浅妄薄见,望与斟酌
I noticed that this function will only attempt to create the last directory in the path, so mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) { $dirs = explode("\\",realpath($path)); $path = $dirs[0]; for($i = 1;$i < count($dirs);$i++) { $path .= "/".$dirs[$i]; if(!is_dir($path)) mkdir($path,$mode); } }Note: I wrote this on windows, where realpath starts with x:\ (x being drive letter)所以,你先把你原来的那些创建目录的代码注释掉 换一个符合上面标准的试试
I noticed that this function will only attempt to create the last directory in the path, so mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) { $dirs = explode("\\",realpath($path)); $path = $dirs[0]; for($i = 1;$i < count($dirs);$i++) { $path .= "/".$dirs[$i]; if(!is_dir($path)) mkdir($path,$mode); } }Note: I wrote this on windows, where realpath starts with x:\ (x being drive letter)所以,你先把你原来的那些创建目录的代码注释掉 换一个符合上面标准的试试
$strsql.=" ('$name','$sex','$question','$answer','','$givenname_cn','$surname_en','$givenname_en','$surname_en',";
$strsql.="'$givenname_en','','$tel','$fax','$mobile',now())"; $result=mysql_query($strsql,$dbh);问题是不是在这里?
你又重新对$result附值,
然后它的下面 }
else
{
header("Location: MAIL/errpage.php?msg=You'd better choose another username");
}
//★★★★★★★★★★★★★★★★★★★★★★★★★★★★
}
它跳出一个判断,但是还在大的if之内,建议你改个名字,比如$result1试试
浅妄薄见,望与斟酌
但确不知为什么,又跳回来执行了if(mysql_num_rows($result)==1)???其它的页面只不过是接受参数据显示参数
你最好把问题简化,谁有功夫去看你这么多代码??
=============================================================
没看清我的提问吗,正因为不知道在哪出错,
要是知道了,我还用问?!!!!!!!
header("Location: MAIL/success.php?username=$name");
}else{
echo "注册失败!!<br>";
echo "请<a href=\"p02.php\">重试</a>,或与系统管理员联系!!";
}
header("Location: MAIL/success.php?username=$name");
}else{
echo "注册失败!!<br>";
echo "请<a href=\"p02.php\">重试</a>,或与系统管理员联系!!";
}
上面的$result1是哪里来的?
//////////////////////////////
另外你说到的权限问题
mkdir或者chmod 0777 是read/write/execute
0775只是对你用PHP创建的文件或者文件夹有以上的权限--推荐使用
////////
另外的建议,在你对$result值重新赋值的地方,用$row=mysql_num_rows($result);echo $row;
看看如果返回的是1,那么问题就出在这里了
如果你是 windows平台的话0777权限好象不支持
你创建目录的方法也有问题,如下:
[email protected]
28-Aug-2001 03:12
I noticed that this function will only attempt to create the last directory
in the path, so
mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) {
$dirs = explode("\\",realpath($path));
$path = $dirs[0];
for($i = 1;$i < count($dirs);$i++) {
$path .= "/".$dirs[$i];
if(!is_dir($path))
mkdir($path,$mode);
}
}Note: I wrote this on windows, where realpath starts with x:\ (x being
drive letter)
浅妄薄见,望与斟酌
$result=mysql_query($strsql,$dbh);
只不过在贴的时候搞错了。那用mkdir时,权限必须是:0777??我的程序根本就执行不到这就跳回去重新执行了:(
第一个7 是owner的,1(execute),2(write),4(read)
第二个7是group 的
第3个是other user的
所以根据自己的需要设定
我还是觉得因为在一个大的if里面,所以$result值不要重新设定
你可以多加一些echo 或print以检验执行到了哪一步
我用
echo 111;
exit;
之类的跟踪,结果,不管在标有(@)中的程序全部报错,原因是:
路径不对之类的,真是奇了.
-----------------------
那么在PHP中调用Mkdir的时候,权限应该是:0777?0775?还是其它?谢谢,只要问题能解决,
我的分还是有的:)
另外,你的打开的这个目录是$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
首先确定它存在
另外,就象我上面说的,你的那个创建目录方法不可行
另外,我从PHP.NET上看到
你创建目录的方法也有问题,如下:
[email protected]
28-Aug-2001 03:12
I noticed that this function will only attempt to create the last directory
in the path, so
mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) {
$dirs = explode("\\",realpath($path));
$path = $dirs[0];
for($i = 1;$i < count($dirs);$i++) {
$path .= "/".$dirs[$i];
if(!is_dir($path))
mkdir($path,$mode);
}
}Note: I wrote this on windows, where realpath starts with x:\ (x being
drive letter)所以,你先把你原来的那些创建目录的代码注释掉
换一个符合上面标准的试试
另外,你的打开的这个目录是$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
首先确定它存在
另外,就象我上面说的,你的那个创建目录方法不可行
另外,我从PHP.NET上看到
你创建目录的方法也有问题,如下:
[email protected]
28-Aug-2001 03:12
I noticed that this function will only attempt to create the last directory
in the path, so
mkdir("./newdir1/newdir2/newdir2",0700);won't work. I wrote this function to do it.function mkpath($path,$mode = 0700) {
$dirs = explode("\\",realpath($path));
$path = $dirs[0];
for($i = 1;$i < count($dirs);$i++) {
$path .= "/".$dirs[$i];
if(!is_dir($path))
mkdir($path,$mode);
}
}Note: I wrote this on windows, where realpath starts with x:\ (x being
drive letter)所以,你先把你原来的那些创建目录的代码注释掉
换一个符合上面标准的试试
此系统是公司请别人做的,但有问题,所以我接手修改----------------------------------------------------
思路:
1,执行搜索用户表,返回mysql_num_rows($result)
2,mysql_num_rows($result)返回0;执行mkdir,创建用户目录,此目录下包含用户信箱的子目录(收信夹,垃圾箱)之类
3,写cookie(setcookie('squirrelmail_language', $language, time()+2592000, $base_uri);
)
4,设置系统默认(setPref($data_dir, $name."@".$domain, 'language', $language);)
5,向数据库搜入用户详细信息
6,导向成功/出错页
--------------------------------------------------------------
<?
system("/home/vpopmail/bin/vadduser -q 5000000 $name@$domain $passwd");
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash/new", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash/cur", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Trash/tmp", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts/new", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts/cur", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Drafts/tmp", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent/new", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent/cur", 0700);
mkdir("/home/vpopmail/domains/$domain/$name/Maildir/.Sent/tmp", 0700);
$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
fputs($FD, "INBOX.Sent\nINBOX.Trash\nINBOX.Drafts");
fclose($FD);echo "ddddddddddd";
ereg( '(^.*/)[^/]+/[^/]+$', $PHP_SELF, $regs);
$base_uri = $regs[1];
setcookie('squirrelmail_language', $language, time()+2592000, $base_uri);
setPref($data_dir, $name."@".$domain, 'language', $language);
echo "/home/vpopmail/bin/vadduser $name@$domain -q 5000000 $passwd";
?>
另外linux和unix文件和目录的权限是这样的:
-rw-rw-r-- 1 root root 0 3月 9 19:44 mail
|
|
是第一是标是链接还是目录等;第二位到第四位是表示本用户对这个文件有什么权限(读、写、执行);第五位到第七位是表示本组用户对这个文件有什么权限;第八位到第十位表示其它组用户对这个文件有什么权限。用chmod可以对权限进行修改。文件权限在一定程序上和文件所在的目录的权限有一定关系。
我无法跟踪,
因为在楼上贴的程序任一地方加
echo
程序都会出错,不知道什么原因
-----------------------------------------------------------------谁能帮忙解释下,谢谢
1,system("/home/vpopmail/bin/vadduser -q 5000000 $name@$domain $passwd");
2,$FD = fopen("/home/vpopmail/domains/$domain/$name/Maildir/courierimapsubscribed", "w");
fputs($FD, "INBOX.Sent\nINBOX.Trash\nINBOX.Drafts");
fclose($FD);
你的那条语句的意思是执行一条添加用户的命令,如果成功的话返回你的命令的 最后一行,失败返回false
下面的语句是以写的方式(这里要注意,你必须有这个权限才可以)打开一个文件,一般不会出错。
然后是对这个写入一行字符
一般也不会有错误产生,最后关闭文件
所以,我的建议还是你 检查一下你创建的那些文件夹,你可以用一个常量试试
比如说
$path="c:\temp";
mkdir($path,0777);,,
你的那条语句的意思是执行一条添加用户的命令,如果成功的话返回你的命令的 最后一行,失败返回false
下面的语句是以写的方式(这里要注意,你必须有这个权限才可以)打开一个文件,一般不会出错。
然后是对这个写入一行字符
一般也不会有错误产生,最后关闭文件
所以,我的建议还是你 检查一下你创建的那些文件夹,你可以用一个常量试试
比如说
$path="c:\temp";
mkdir($path,0777);,,
应该可以确定问题所在的。开发阶段,最好把所有的错误和警告都打印出来,有助于程序的调试。
保持你现在的结构,先检验一下结构是否正确,然后剔除有可能出错的地方再检查,用简单的语句替换复杂但是性质相同的语句
有这个命令吗?是adduser 或者useradd吧
你改动一下试
2.对表进行处理谢谢 _Shakespeare(网络骑士),以后有事到asp版来找我,呵呵