Переименование файлов увеличивается по мере их загрузки - PHP - PullRequest
1 голос
/ 07 марта 2012

Мне нужно дать порядковый номер файлам при загрузке. Я использую SFWUpload. У меня есть этот код:

mkdir("../../imagenes/".$codigo , 0777);
$i = 1;
$nombre = $codigo.'_'.$i.'.jpg';
move_uploaded_file($_FILES['Filedata']['tmp_name'], "../../imagenes/".$codigo."/".$nombre);
chmod("../../imagenes/".$codigo."/".$_FILES['Filedata']['name'], 0777);

Код $ codigo - это, например, 101213, поэтому мне нужно загрузить картинки, например 101213_1.jpg, 101213_2.jpg, 101213_3.jpg и т. Д.

Проблема в том, что SWFUpload запускает php ОДИН РАЗ за картинку, поэтому я не могу использовать цикл foreach (я полагаю).

Мне нужен скрипт, чтобы проверить, существует ли файл, и напишите следующий. Например, если существует 101213_4.jpg, напишите 101213_5.jpg.

Можете ли вы помочь мне, как я могу это сделать? Я новичок в php, и все перепробовал! (

Заранее спасибо

Roberto

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Вот функция, которую я использую:

function cleanup_name($name){ //accepts name and cleans it up.
$finalDir='/home/username/uploads';

# Go to all lower case for consistency
$name = strtolower($name);
//echo("Name is $name<br>");

$matches=split('\.',$name);
foreach ($matches as $key=>$value){
$exkey=$key;
$exvalue=$value; //if there is more than one period, this will find the actual extension.
//echo("Key $key|$exkey Value $value|$exvalue<br>");
}

if ($exkey<1){die('The file must have an extension.');}
$extension=".".$exvalue;
$loop=0;
while ($loop<($exkey)){
if ($loop<($exkey-1)){$matches[$loop]=".".$matches[$loop];} // this puts extra periods back into the string, but the borrowed code will replace them with underscores.
$stem.=$matches[$loop];
$loop++;
}

//echo("Stem is $stem<br>");
//echo("Extension is $extension<br>");

# Convert whitespace of any kind to single underscores
$stem = preg_replace('/\s+/', '_', $stem);

# Remove any remaining characters other than A-Z, a-z, 0-9 and _
$stem = preg_replace('/[^\w]/', '', $stem);

# Make sure the file extension has no odd characters
if (($extension != '') &&
  (!preg_match('/^\.\w+$/', $extension)))
{
  echo("odd characters in extension");
  //die("Bad file extension");
  return FALSE;
}

$safeExtensions = array(
'.zip',
'.psd',
'.pdf',
'.jpg',
'.jpeg',
'.gif',
'.rar',
'.gz',
'.ai',
'.eps',
'.bmp',
'.pub',
'.xls',
'.doc',
'.wpd',
'.rtf',
'.tiff',
'.tif',
'.pcx',
'.ttf',
'.png',
'.txt',
'.mp3',
'.avi',
'.mov',
'.wav'
);

if (!in_array($extension, $safeExtensions)) {
  echo("Extension &quot;$extension&quot; not approved.");
  //die("File extension not approved");
  return FALSE;
}

# Search for a unique filename by adding a number to the
# stem (first we try without, of course)

$suffix = '';
while (file_exists($finalDir."/".$stem.$suffix.$extension)) {
  if ($suffix == '') {
    $suffix = '0';
  } else {
    $suffix++;
  }
}

# Put the full name back together
$name = "$stem$suffix$extension";
return $name;
}

Обратите особое внимание на раздел с этим: "while (file_exists ..."

0 голосов
/ 07 марта 2012

Ну ... вы можете попытаться получить текущее количество файлов в папке и получить оттуда $i:

mkdir("../../imagenes/".$codigo , 0777);
$i = count(glob("../../imagenes/".$codigo.'_*.jpg')) + 1;
$nombre = $codigo.'_'.$i.'.jpg';
move_uploaded_file($_FILES['Filedata']['tmp_name'], "../../imagenes/".$codigo."/".$nombre);
chmod("../../imagenes/".$codigo."/".$nombre, 0777);

Попробуйте этот код ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...