首先,说说我的服务器环境:WINDOWS2003SERVER,APACH2,PHP5
我的任务是:从一个有一大堆文件的目录中查找相应文件并考贝到同空间中另一个目录中,目标目录要求按文件不同建立不同的目录并放相应的文件。目标目录层数并不多,最多4层。
问题:问题就出在目录名的长度上:因为我想用目录名称准确地表达相应文件的信息,所以,目录的名称都很长,有的甚至达到好几十个汉字,文件名称也多半比较长。这样,当拷贝文件到层数比较多的目录时,用COPY函数拷贝文件时会失败,用FILE_EXISTS在该目录下检测文件是否存在时也会失败(经过测试,就算目录下真实存在一个文件,该函数也会报文件不存在。)。
开始以为是文件或者目录名称含汉字引起的,可是,目录已经成功创建,说明,目录名称是没有问题的。而我把同一个文件拷贝到一个层数比较少的目录时,就没有任何问题。后来,把目录名称的长度减小,两个涵数使用就一切正常了。
所以,我怀疑,PHP的文件操作对路径的总长度是有限制的。
问:PHP的文件操作对路径的总长度有限制的吗?限制多少?怎么改变这个限制?
大家可以测试一下下面这段程序:$dirnamelenth=50;
for($i=0;$i<4;$i++){
echo $i."<br>";
$dirname=getname($dirnamelenth);
mkdir($dirname);
chdir($dirname);
if($fp=fopen(getname(8).'.txt','w')){
fwrite($fp,getname(200));
}
fclose($fp);
}
echo "完成";
function getname($k){
$zmb='abcdefghijklmnopqrstuvwxyz';
$name='';
for($i=0;$i<$k;$i++){
$name.=substr($zmb,rand(0,25),1);
}
return $name;
}
$dirnamelenth这个值越越大,完成的层数越少。在我环境中,这个值最多到50,才能完成4层目录的创建,到51,就只能完成3层了。这个值可能还跟你的程序的当前目录的深度有关系。我程序的当前目录到根目录的路径长度大概在40个字符的样子,所以,我估计,整个路径长度的限制可能在250个字符左右。
大家测试一下,看看这个问题能否重复。