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 :: Нюансы использования microtime

 PHP.SU

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


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

> Без описания
allforweb
Отправлено: 04 Декабря, 2010 - 01:06:58
Post Id


Гость


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


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




При парсинге новостей парсю отдельно изображения. Все делаю в цикле. Чтобы дать изображениям новые уникальные имена использовал функцию time, но столкнулся с такой проблемой, что некоторые картинки имеют одинаковые названия. Попробовал функцию microtime и получилось что в базу записываются изображения с одним названием, а в папку загрузки с другим.

Вот код
PHP:
скопировать код в буфер обмена
  1. copy ("http://".$img_src[1],$uploadimage.substr(md5(microtime()), 11).".jpg");
  2. //копирую картинку с удаленного сервера и даю новое имя
  3. $imagename = $uploadimage.substr(md5(microtime()), 11).".jpg";
  4. //копирую новое имя файла в переменную
  5. $imagename = basename ($imagename);
  6. //обрабатываю чтобы получить чистое имя файла.


Как правильно перехватить новое имя файла при копировании?
 
 Top
OrmaJever Модератор
Отправлено: 04 Декабря, 2010 - 01:25:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




для таких вещей можно использовать rand()


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
dzubchik
Отправлено: 04 Декабря, 2010 - 02:35:28
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Июль 2010  


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




или просто функцию time().
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2010 - 04:26:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Или сделать по своему, но не получать новое время каждый раз,а написать: $newname = md5(microtime()), тогда и ошибок не будет
 
 Top
vasa_c
Отправлено: 04 Декабря, 2010 - 17:03:39
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Июнь 2009  


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




OrmaJever пишет:
для таких вещей можно использовать rand()

Сейчас топикстартер заменит microtime() на rand() и получит тот же результат Улыбка
 
 Top
OrmaJever Модератор
Отправлено: 04 Декабря, 2010 - 17:22:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




ну понятно что если на место microtime() поставить rand() тоничего не будет. Нужно написать небольшую функцию.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2010 - 17:49:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




DeepVarvar пишет:
не получать новое время каждый раз
 
 Top
JustUserR
Отправлено: 04 Декабря, 2010 - 20:44:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




allforweb пишет:
Как правильно перехватить новое имя файла при копировании?
Для реализации приведенной вами задачи по осуществлению генерации уникальных имен для файловых объектов - в действительности целесообразным вариантом решения является использование функции uniqid с возможным указанием префикса группы объектов
Однако решение данной задачи возможно и согласно приведенным вами требования с определением существованя имени файла - что может быть реализовано посредством использования исключительной и разделяющей блокировки для инстанций PHP-скриптов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
allforweb
Отправлено: 04 Декабря, 2010 - 21:21:43
Post Id


Гость


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


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




А можно поподробнее? Только не забывайте что это парсер.
 
 Top
JustUserR
Отправлено: 04 Декабря, 2010 - 21:28:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




allforweb пишет:
А можно поподробнее? Только не забывайте что это парсер
В случае если выполнение целевого PHP-скрипта осуществляется в едином последовательном потоке без возможности создания конкуртных процессов - то возникновение указанной вами проблемы с обеспечением появления идентичных временных меток может быть разрешено посредством установку инструкции sleep(1) Однако в реальных многопоточных системах необходимо включение таких механизмов взаимной блокировки как в частности FILE_LOCK - в таком случае для параллельно исполняемых PHP-скриптов обеспечивается возможность приостановления потока выполнения по момент получения монопольного доступа к ресурсу - более подброная информация по данному вопросу предоставлена здесь http://php.su/functions/?flock


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Декабря, 2010 - 21:30:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




allforweb единственная ошибка в существующем коде - это повторное создание рандом-имени...
http://forum.php.su/topic.php?fo...29579#1291429579
 
 Top
allforweb
Отправлено: 05 Декабря, 2010 - 20:20:00
Post Id


Гость


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


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




DeepVarvar пишет:
allforweb единственная ошибка в существующем коде - это повторное создание рандом-имени...

Это я уже понял. $newname = md5(microtime()) - а можно подробнее код написать?
Вот так верно будет?
PHP:
скопировать код в буфер обмена
  1.  
  2. copy ("http://".$img_src[1],$uploadimage.substr(md5(microtime()), 11).".jpg");
  3. //копирую картинку с удаленного сервера и даю новое имя
  4. $imagename = md5(microtime())".jpg";
  5. //копирую новое имя файла в переменную
  6.  
  7. //здесь уже можно не обрабатывать?
  8. $imagename = basename ($imagename);
  9. //обрабатываю чтобы получить чистое имя файла.
  10.  
 
 Top
JustUserR
Отправлено: 06 Декабря, 2010 - 00:37:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




allforweb пишет:
Это я уже понял. $newname = md5(microtime()) - а можно подробнее код написать? Вот так верно будет?
Использования операции создания хеш-кода для заданной фиксированой строки осуществляет генерирование единого результата - по этой причине в случае если используемый вами параметр текущего времени является повторяющейся величиной в инстациях выполнения PHP-скрипта - то использование указанного подхода не обеспечит достижение желаемого результата


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
allforweb
Отправлено: 06 Декабря, 2010 - 00:46:31
Post Id


Гость


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


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




Может кто-то сможет помочь мне решить эту задачу не только теоретически, а практически, показать код, который будет работать?

Задача вроде простая, но я ее решить пока не могу:

    картинка копируется парсером в цикле очень быстро
    парсим картинку - копируем в каталог - сразу даем ей новое уникальное имя (это у меня делается одной строкой)
    новое уникальное имя нужно загнать в БД


Как из этой строки можно получить только новое уникальное имя файла?
PHP:
скопировать код в буфер обмена
  1. copy ("http://".$img_src[1],$uploadimage.substr(md5(microtime()), 11).".jpg");
  2. //копирую картинку с удаленного сервера - указываю путь к папке с изображениями - и даю картинке новое уникальное имя используя функцию microtime
 
 Top
OrmaJever Модератор
Отправлено: 06 Декабря, 2010 - 02:14:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




В одной строчке не как. Нужно присваивать переменую
PHP:
скопировать код в буфер обмена
  1.  
  2. $name = $uploadimage.substr(md5(microtime()), 11).".jpg";
  3. copy ("http://".$img_src[1],$name);
  4. // а затем $name добавляем в базу


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB