$blogDir = 'blog/';
$blogDirHandle = opendir( $blogDir );
$checkingFile = '';
$number = 0;
$codeNumber = '-'.$number.'-';
if( $blogDirHandle = opendir( 'blog/' ) )
{
while( false !== ( $checkingFile = readdir( $blogDirHandle ) ) )
{
if( $checkingFile != '.' && $checkingFile != '..' && !is_dir( $blogDir.$checkingFile ) && false !== strpos( $checkingFile, $codeNumber ) )
{
$number++;
$codeNumber = '-'.$number.'-';
}
}
closedir( $blogDirHandle );
}
如果$ blogDir有一个以当前$ codeNumber开头的文件,则应检查上面的代码。如果是,则增加$ number(从而更改$ codeNumber),然后循环检查,直到没有更多的文件以$ codeNumber开头。 在此之后,我创建了多个文件,这些文件以新的$ codeNumber命名。
但由于某种原因,它不起作用。
如果目录中只有一个名为-0-filename.php的文件,它会增加该值,我创建的下一个文件的前缀为-1-。但是在创建第二个文件后,它不会增加$ number。它只是生成带有重复前缀的文件(即-0-filename.php,-1-othername.php和-1-thirdname.php)
任何帮助?
答案 0 :(得分:1)
Let me repeat myself, from your previous question:将所有文件收集到一个数组中,然后对其进行操作。
假设您的文件夹包含2个文件:
-0-filename.txt
-1-filename.txt
但由于某种原因,您的服务器以相反的顺序列出此目录,因此在第一次迭代中您检查-0-
但当前文件是-1-filename.txt
,没有任何反应,数字不会增加且{{ 1}}正在移动到readdir
的下一个文件。现在你有了匹配,数字会增加,但是没有更多的文件需要阅读 - -0-filename.txt
循环已经结束,你剩下的数字= 1.
答案 1 :(得分:0)
这是另一种方法:
$lastNum = 0;
if ( ( $files = scandir( 'blog/' ) ) !== FALSE && count( $files ) > 0 )
{
$lastNum = substr( $files[ count( $files ) - 1 ], 1, 1 );
}
scandir()
返回从指定路径中提取的已排序文件名数组。
然后代码获取已排序数组的最后一个条目(如果目录中的文件是GUARANTEED(!)以遵循上述约定,则将是文件名中具有最大编号的那个),然后提取文件名中的第二个字符,应该是文件编号指示符。