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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помогите реализовать это
nkl
Отправлено: 13 Февраля, 2012 - 01:54:43
Post Id



Посетитель


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


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




Доброй ночи, всем!

На начальном этапе проектирования БД, была допущена, как сейчас оказалось, критическая ошибка. Вернее я посчитал, что записывать полное имя изображения не имеет смысла, т.к. мне известен id лота к которому это изображение принадлежит, а само изображение в своем имени содержит этот id.

Непонятно? Объясню по порядку. У меня есть таблица lots (id, name, title, ...). При создании новой записи, на сервер загружается фото этого лота, для фоток предусмотрено 2 папки full и thumb, полное и уменьшенное фото соответственно. Естественно файлы переименовываются, таким вот образом full/lot-[id лота].jpeg и thumb/thumb-[id].jpeg. Например, 'full/lot-22.jpeg', 'thumb/thumb-22.jpeg' или 'full/lot-25.gif', 'thumb/thumb-25.gif'. Думаю вы поняли в чем моя загвоздка? Я знаю имя файла, но я незнаю какое расширение мне подставить в конец. Как это можно сделать без хирургического вмешательства в БД и уже написанные для неё WEB-редакторы? Я знаю что это возможно, но не могу вдуплить как, а лезть и перекраивать всю таблицу, да еще и её ВЕБ-морды, как то совсем не весело Огорчение
(Добавление)
Все, я понял как это сделать! Опишу на словах ибо мой мозг еще пока не успевает так быстро составлять скрипты.

Нужно выполнить scandir() обоих директорий и искать имя файла перебирая полученные массивы. Если кто может это быстренько чиркануть, буду очень признателен! Горю по срокам, как обычно...
А?!
(Добавление)
Половина уже написана. Осталось вернуть true, если строка присутствует в строке. Как это сделать?

(Отредактировано автором: 13 Февраля, 2012 - 02:05:29)

 
 Top
sKaa
Отправлено: 13 Февраля, 2012 - 02:21:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


Жесть )))
 
 Top
nkl
Отправлено: 13 Февраля, 2012 - 02:34:15
Post Id



Посетитель


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


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




sKaa, а по теме слабо?
 
 Top
Ezi
Отправлено: 13 Февраля, 2012 - 02:38:28
Post Id



Частый гость


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


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




Мне кажется тебе лучше сейчас архитектуру БД исправить, самопал написать для этого и всё, а то если будешь каждый раз через скандир, думаю сервер упадет в спячку))
(Добавление)
Точнее тебе необходимо все файлы картинок с одному разрешению привести, либо в БД заносить относительные пути для картинки материала


-----
Хочешь жить - умей вертеться
 
 Top
sKaa
Отправлено: 13 Февраля, 2012 - 02:47:21
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


PHP:
скопировать код в буфер обмена
  1. // 0 - full
  2. // 1 - thumb
  3. function getImage($type=0, $id){
  4.         return ($type==0) ? 'full/lot-'.$id.'.jpeg' : 'thumb/thumb-'.$id.'.jpeg';
  5. }
  6.  
  7. $fullimage = getImage(0, 22); // return full/lot-22.jpeg
  8. $thumbimage = getImage(1, 22); // return full/thumb-22.jpeg
 
 Top
nkl
Отправлено: 13 Февраля, 2012 - 02:48:36
Post Id



Посетитель


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


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




Это действие будет выполнятся из админки, поэтому о нагрузке можно не беспокоится. Да и не такая уж и емкая это функция scandir(). Ребят, не тупите, говорю же перекраивать таблицу и Web-морды не буду. Да и хранить, по сути целый избыточный столбец, тоже не есть гуд.
Хотя неее, погодите, этот скандир нужно будет делать каждый раз при необходимости вывести фото. Это я тут туплю, мля... Пошел перекраивать Огорчение okay

(Отредактировано автором: 13 Февраля, 2012 - 02:50:49)

 
 Top
Ezi
Отправлено: 13 Февраля, 2012 - 02:52:40
Post Id



Частый гость


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


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




nkl пишет:
Хотя неее, погодите, этот скандир нужно будет делать каждый раз при необходимости вывести фото. Это я тут туплю, мля...


Вот-вот, а я о чем Улыбка спать ночью надо, и тупить не будешь!))


-----
Хочешь жить - умей вертеться
 
 Top
sKaa
Отправлено: 13 Февраля, 2012 - 02:54:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


nkl моя функция не работает ?:
 
 Top
nkl
Отправлено: 13 Февраля, 2012 - 02:54:58
Post Id



Посетитель


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


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




sKaa, твоя функция работать не будет. Просто потому, что файлов с расширением jpeg может и не быть.
 
 Top
Ezi
Отправлено: 13 Февраля, 2012 - 02:58:23
Post Id



Частый гость


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


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




nkl, ну дак что тебе мешает сделать массив расширений имеющихся на сервере файлов, а затем foreach пробежать по каждому, если тру, то выводим картинку Радость я так понял тебе вообще по*уй что сервер будет под нагрузкой, думаю падения в нокаут точно не избежать))


-----
Хочешь жить - умей вертеться
 
 Top
sKaa
Отправлено: 13 Февраля, 2012 - 02:59:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


nkl печально у тебя там всё Улыбка
PHP:
скопировать код в буфер обмена
  1.     // 0 - full
  2.     // 1 - thumb
  3.     function getImage($type=0, $id){
  4.                 $ext = array('gif', 'jpeg', 'jpg', 'png', 'bmp');
  5.                 $dir = ($type==0) ? 'full/lot-' : 'thumb/thumb-';
  6.                 foreach($ext as $key => $value){
  7.                         if(file_exists($dir . $id . '.' . $value)) return $dir . $id . '.' . $value;
  8.                 }
  9.         return false;
  10.     }
  11.      
  12.     $fullimage = getImage(0, 22); // return full/lot-22.jpeg
  13.     $thumbimage = getImage(1, 22); // return full/thumb-22.jpeg
  14.  
 
 Top
Ezi
Отправлено: 13 Февраля, 2012 - 03:01:33
Post Id



Частый гость


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


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




sKaa пишет:
nkl печально у тебя там всё


это просто ужасно, Ха-ха желаю процветания проекту, чтобы аффтор темы узнал на сколько нужно ценить телодвижения сервера Радость


-----
Хочешь жить - умей вертеться
 
 Top
nkl
Отправлено: 13 Февраля, 2012 - 03:06:19
Post Id



Посетитель


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


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




Ezi, я уже понял, какую нагрузку это создаст на сервер. Я пытался вывести картинку только в админке, потому как только она сейчас и есть. А потом я представил как картинки будут выводится в шаблон и чуть со стула не упал.

В общем, я понял, вместо того, что бы перекраивать базу, проще привести все картинки к общему расширению и все. Блага никаких конвертеров из формата в формат писать не нужно, или я не прав?

Поэкспериментировав сейчас на одном файле понял что расширения вообще можно любое поставить и apach все равно выведет картинку.
 
 Top
sKaa
Отправлено: 13 Февраля, 2012 - 03:08:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


nkl скажешь мне потом адрес твоего сайта? я тебе покажу : "как взломать всё за 60 секунд"
(можно в личку, чтоб я один такой был, а то потом поди разберись кто если не я)

(Отредактировано автором: 13 Февраля, 2012 - 03:09:17)

 
 Top
Ezi
Отправлено: 13 Февраля, 2012 - 03:11:13
Post Id



Частый гость


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


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




nkl пишет:
понял что расширения вообще можно любое поставить и apach все равно выведет картинку.


ЛОЛ, апачу вообще пофиг что отдовать, тут вот зависит как такие файлы будет конечная ОС пользователя будет отоброжать. ОСь же анализирует содержимое фала, допустип если у нас есть файл с именем img.gif а мы его переименовали в img.jpg, то мы банально ему имя файла изменили, конечное расширение так же останется GIF, для наглядности сказаного можешь картинки в блокноте пооткрывать!


Кто умнее в ОСях и прочей ерунде, поправте меня если я не прав))
(Добавление)
sKaa пишет:
nkl скажешь мне потом адрес твоего сайта? я тебе покажу : "как взломать всё за 60 секунд"
Радость лол Радость

Каким методом собрался ломать, напиши в личку плиз, ради интереса_))


-----
Хочешь жить - умей вертеться
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB