2012-03-10 7 views
1
$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で名前が付けられた複数のファイルを作成します。PHP:何らかの理由で値が増えない

しかし、何らかの理由で動作しません。

ディレクトリに-0-filename.phpというファイルが1つしかない場合は、値が増え、作成する次のファイルにはプレフィックスとして-1が付きます。しかし、2番目のファイルを作成すると、$ numberはインクリメントされません。プレフィックスを含む重複ファイルを作成するだけです(-0-filename.php、-1-othername.php、-1-thirdname.php)

助けてください。

+0

ループから出てくるファイル名を 'echo'しました(つまり、' $ checkFile')?おそらく '-1-'ファイルが最初に検索され、 '$ number = 0'がインクリメントされてから' -0- 'ファイルが検索され、' $ checkingFile = '/ blog/-0- ... 'と '$ number = 1'なので、条件は失敗し、あなたのループは' $ number = 1'を残して終了します。ちょうど推測です。 – Yaniro

+0

どの時点で$ checkFileをエコーする必要がありますか? –

+0

'while()' – Yaniro

答えて

1

Let me repeat myself, from your previous question:すべてのファイルをアレイに集めてから操作します。

フォルダが2つのファイルが含まれているとしましょう:

-0-filename.txt 
-1-filename.txt 

しかし、あなたのサーバが逆の順序で、このディレクトリを一覧表示され、いくつかの理由で、最初の反復では、あなたが-0-をチェックしているので、しかし、現在のファイルが-1-filename.txtで、何も起こりません番号はインクリメントされず、readdirは次のファイル-0-filename.txtに移動しています。今、あなたは試合、番号がインクリメントされているが、これ以上のファイルが存在しない読み取るために - readdirループが終了していると、あなたはそれを行うために数= 1

+1

+1、あなたと@ヤニロは正しかった。 – davidethell

0

ここだ別の方法が残されています。

$lastNum = 0; 

if (($files = scandir('blog/')) !== FALSE && count($files) > 0) 
{ 
    $lastNum = substr($files[ count($files) - 1 ], 1, 1); 
} 

scandir()指定されたパスから抽出されたファイル名のソートされた配列を返します。 次に、ソートされた配列の最後のエントリがコードに格納されます(ただし、ディレクトリ内のファイルが上記の規則に従うことを保証されていれば、ファイル名の中で最も番号の大きいものになります)。ファイル番号インジケーターであるはずのファイル名から2番目の文字。

+0

申し訳ありませんが、私は数日間は行きました。 - あなたのコードをどこに置くべきですか/私は何を置き換えるべきですか? –

+0

:)、すべてを交換してください。このコードはあなたが必要とするものを正確に行い、それを遊び、それをチェックアウトすることになっています。 – Yaniro

関連する問題