2011-10-20 12 views
1

基本的には、ファイルがすでに存在するたびに番号を追加します。したがって、$url.phpが存在する場合は、$url-1.phpにしてください。 $url-1.phpが存在する場合は、$url-2.phpとするなどです。ファイル名が既に存在する場合は、リンクを開く番号を追加してください。

これは私がすでに思いついたものですが、初めてのことだと思います。

if(file_exists($url.php)) { 
    $fh = fopen("$url-1.php", "a"); 
    fwrite($fh, $text); 
} else { 
    $fh = fopen("$url.php", "a"); 
    fwrite($fh, $text); 
} 
fclose($fh); 

答えて

1

私はこのようなシナリオではwhileループを使用します。

$filename=$url;//Presuming '$url' doesn't have php extension already 
$fn=$filename.'.php'; 
$i=1; 
while(file_exists($fn)){ 
    $fn=$filename.'-'.$i.'.php'; 
    $i++; 
} 
$fh=fopen($fn,'a'); 
fwrite($fh,$text); 
fclose($fh); 

すべてのことは、この方向の解はうまくスケールされないということです。あなたは100 file_existsを日常的にチェックしたくありません。

+0

シンプルで理解しやすいコード:)ただ、fcloseはしcfloseのタイプミスを変更 – FrozenTime

+0

@ user987026おっと、ハハ、おかげで、それが今で固定です。 – Shad

-1
<?php 
$base_name = 'blah-'; 
$extension = '.php'; 
while ($counter < 1000) { 
    $filename = $base_name . $counter++ . $extension; 
    if (file_exists($filename)) continue; 
} 
$fh = fopen($filename, "a"); 
fwrite($fh, $text); 
fclose($fh); 
+0

'if(file_exists(..))continue;' whileループの中では意味がありません。デフォルトの動作は続行します... – Shad

2

whileループには、カウンタ変数$iを使用します。 file_exists()がfalseを返すまでカウンタをインクリメントし続けます。その時点で、whileループが終了し、$iの現在の値でファイル名にfopen()を呼び出します。

if(file_exists("$url.php")) { 
    $fh = fopen("$url-1.php", "a"); 
    fwrite($fh, $text); 
} else { 
    $i = 1; 
    // Loop while checking file_exists() with the current value of $i 
    while (file_exists("$url-$i.php")) { 
    $i++; 
    } 

    // Now you have a value for `$i` which doesn't yet exist 
    $fh = fopen("$url-$i.php", "a"); 
    fwrite($fh, $text); 
} 
fclose($fh); 
0

私はこのような何かを探していて、私のニーズに合わせてShadの答えを拡張しました。私はfileuploadは、すでにサーバー上に存在するファイルを上書きしないことを確認する必要があります。 私はまだ「保存」していないことを知っています。拡張子を持たないファイルは処理しないためです。しかし、多分それは誰かのための少しの助けです。

 $original_filename = $_FILES["myfile"]["name"]; 
     if(file_exists($output_dir.$original_filename)) 
     { 

      $filename_only = substr($original_filename, 0, strrpos($original_filename, ".")); 
      $ext = substr($original_filename, strrpos($original_filename, ".")); 

      $fn = $filename_only.$ext; 
      $i=1; 
      while(file_exists($output_dir.$fn)){ 
       $fn=$filename_only.'_'.$i.$ext; 
       $i++; 
      } 
     } 
     else 
     { 
      $fn = $original_filename; 
     } 
関連する問題