Добавить номер в ссылку fopen, если это имя файла уже существует - PullRequest
1 голос
/ 20 октября 2011

По сути, я хочу продолжить добавление чисел каждый раз, когда файл уже существует.Так что если $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);

Ответы [ 4 ]

2 голосов
/ 20 октября 2011

Использовать цикл while с переменной счетчика $i.Продолжайте увеличивать счетчик, пока file_exists() не вернет false.В этот момент цикл while завершается, и вы вызываете fopen() для имени файла с текущим значением для $i;

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);
2 голосов
/ 20 октября 2011

Я использую петли 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 голосов
/ 07 марта 2014

Я искал нечто подобное и расширил ответ Шэда на мои нужды.Мне нужно убедиться, что загрузка файла не перезаписывает файлы, которые уже существуют на сервере.я знаю, что это еще не «сохранить», потому что он не обрабатывает файлы без расширения.но, может быть, это немного поможет кому-то.

        $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;
        }
0 голосов
/ 20 октября 2011
<?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);
...