Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Переименование а после загрузки на сервер

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alexpebody
Отправлено: 01 Июля, 2015 - 13:48:51
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Всем приветы!

Друзья подскажите пожалуйста, есть неплохой скрипт мульти загрузки файлов, нужно после копирования на сервер их каждый переименовать, кто может, гляньте где ошибка, т.к. переименовывает только 1 файл, хотя в цикле все вроде ок. Заранее всем спасибо!!!

index.php:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <script>
  2. function xdropFile(btn)
  3. {
  4. if(document.getElementById)
  5. {
  6.  tr = btn;
  7.  while (tr.tagName != 'TR') tr = tr.parentNode;
  8.  tr.parentNode.removeChild(tr);
  9.  checkForLast();
  10. }
  11. }
  12. function xaddFile(btn)
  13. {
  14. if(document.getElementById)
  15. {
  16.  tr = btn;
  17.  while (tr.tagName != 'TR') tr = tr.parentNode;
  18.  var idSuffix = Math.round(Math.random()*1000);
  19.  var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
  20.  thisChilds = newTr.getElementsByTagName('td');
  21.  for (var i = 0; i < thisChilds.length; i++)
  22.  {
  23.   if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = '';
  24.   if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="xtt[]" class="wideFile" type="file">';
  25.  }
  26.  checkForLast();
  27. }
  28. }
  29. function checkForLast()
  30. {
  31. btns = document.getElementsByName('xdrop');
  32. for (i = 0; i < btns.length; i++)
  33. {
  34.  btns[i].disabled = (btns.length == 1) ? true : false;
  35.  }
  36. }
  37. </script>
  38. <body>
  39. <form action="upload.php" method="post" name="form" ENCTYPE="multipart/form-data" align="center">
  40.  <table width=20% align=center>
  41.   <tr>
  42.           <td width="20%"><input type="file" size="32" name="xtt[]"></td>
  43.           <td nowrap="nowrap">
  44.                  <input type="button" name="xdrop" value=" &minus;" onClick="xdropFile(this);">
  45.                  <input type="button" value=" + " onClick="xaddFile(this);">
  46.           </td>
  47.   </tr>
  48.  </table>
  49.  <input name="" type="submit">
  50. </form>
  51. </body>


upload.php:
PHP:
скопировать код в буфер обмена
  1. <?
  2. global $rstring;
  3. function RString($max=6) {
  4. $i = 0; //Reset the counter.
  5. $possible_keys = "0123456789abcdefghijklmnopqrstuvwxyz";
  6. $keys_length = strlen($possible_keys);
  7. $str = ""; //Let's declare the string, to add later.
  8. while($i<$max) {
  9. $rand = mt_rand(1,$keys_length-1);
  10. $str.= $possible_keys[$rand];
  11. $i++;
  12. }
  13. return $str;
  14. }
  15. $rstring = RString();
  16. for($i=0;$i<count($_FILES['xtt']['name']);$i++)
  17. {
  18. $uploaddir = 'files/';
  19. $uploadfile = $uploaddir . basename($_FILES['xtt']['name'][$i]);
  20. move_uploaded_file($_FILES['xtt']['tmp_name'][$i], $uploadfile);
  21. }
  22. foreach ($_FILES['xtt']['name'] as $fnum=>$link)
  23. rename('files/'.$link, 'files/'.$GLOBALS['rstring']);
  24. ?>
  25. </body>
  26. </html>
 
 Top
broshurkaplus
Отправлено: 01 Июля, 2015 - 14:40:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




быстрым взглядом...
$max=6 - так полагаю максимальное число файлов, нет это длина строки, а переименовывает - потому что строка сформировалась один раз и получается что все файлы переименовывает в это имя.
попробуйте $rstring = RString(); переместить внутрь последнего foreach, тогда строка будет каждый раз генериться в цикле.

гдето было такое...
попробуйте так:

$newFileName - глобал, (например для дуступа вне функции для вставки в бд) както опрелите уник. имя для данной загрузки или сгенерьте

$newFileName = RString();

$maxfile - максимальное колво файлов (ограничте в скрипте, вдруг кто 100500файлов отправит, или подсчитайте count)
PHP:
скопировать код в буфер обмена
  1. $url='files/';
  2. for ($i = 0; $i < $maxfile; $i++)
  3.     {        
  4.         //---временный файл
  5.         $tmpfilename = $_FILES['postimg']['tmp_name'][$i];
  6.         //----тут проверки, код...
  7.  
  8.         /*
  9.                добавлять к названию $num_img (+1 - чтоб не с 0) в пределах данной загрузки
  10.         */
  11.         $num_img=$i+1;
  12.         //----Перемещаем загруженный файл в необходимую папку $url с составленным именем
  13.         if (!move_uploaded_file($tmpfilename, $url . '/' . $newFileName . '-img-' . $num_img . '.jpg'))
  14.         {
  15.             //----$prichina глобал, при ошибке
  16.             $prichina = 'Произошла ошибка при перемещении файла в папку.' . $url;
  17.             return false;
  18.         }
  19.         //----код, ватемарк всякий...
  20. }


может подойдет или на мысль натолкнет.
 
 Top
Sail
Отправлено: 01 Июля, 2015 - 15:05:48
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




alexpebody, почитайте описание функции rename и посмотрите, что Вы ей скармливаете...
 
 Top
alexpebody
Отправлено: 01 Июля, 2015 - 16:50:29
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




broshurkaplus спасибо большое за ответ, а нельзя как то в цикле как у меня сделать переименование, чтобы не писать кучу кода? Я имею ввиду, как сделать в цикле foreach чтобы переименовывал каждый файл загруженный на хост? Я пробовал в цикле после самой загрузки, но это неверно, т.к. цикл не успевает за тем, как файлы переместятся из темпа в каталог и показывает ошибку об отсутствии файлов, а если ниже, переименовывает но только 1й файл... Цикл неверен.

Спойлер (Отобразить)

$max=6 - это 6 символов генерится в рандоме для нового имени. А куда именно переместить в foreach, я так понмиаю не переименовывает все файлы тк не получает, а точнее получает не те сведения и работает не в том цикле.

Sail спасибо за ответ, да вроде читал, а что не так? Можете примерчик привести, если не сложно подскажите верный цикл для этой задачи? Спасибо!

(Отредактировано автором: 01 Июля, 2015 - 16:59:43)

 
 Top
alexpebody
Отправлено: 02 Июля, 2015 - 05:24:03
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Всем спасибо, все очень много проще, видимо вчера вечером голова не варила Улыбка

PHP:
скопировать код в буфер обмена
  1. $uploaddir = 'files/';
  2. $uploadfile = $uploaddir . basename($rstring.'_'.$_FILES['xtt']['name'][$i]);
  3. //move_uploaded_file($_FILES['xtt']['tmp_name'][$i], $uploadfile);
  4. move_uploaded_file($_FILES['xtt']['tmp_name'][$i], $uploadfile);

(Отредактировано автором: 02 Июля, 2015 - 05:43:35)

 
 Top
broshurkaplus
Отправлено: 02 Июля, 2015 - 13:34:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




я полагал нужно каждый раз генерить строку.
не понял зачечем basename?
сразу задавайте имя при перемещении файла из массива FILES в нужную папку:

move_uploaded_file(файл в массиве FILES, нужный каталог/файл с новым именем: сгенеренная строка'_'старый файл);
 
 Top
alexpebody
Отправлено: 02 Июля, 2015 - 13:36:11
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




broshurkaplus спасибо большое, я понял, просто видимо вечером совсем запарился ) все сделал.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB