Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]pomoc w optymalizacji kodu
Forum PHP.pl > Forum > PHP
źrebak
Witam, pracuje nad wyswietlaniem zdjec do ofert z bazy mysql. Zdjecia zapisane sa w bazie w polach typu BLOB. Pod kazda oferta mam link - Zobacz zdjecia - po kliknieciu ktorego przenosimy sie do pliku foto.php o nastepujacej tresci:
  1. <?php
  2. $sql = &#092;"SELECT unikat FROM zdjecia WHERE sygnatura = '$sygnatura'\"; //unikat to 'id' zdjecia
  3. $result = @mysql_query($sql);
  4. $num_results = mysql_num_rows($result);
  5. $i=0;
  6. if ($num_results !=0)
  7.  {
  8.  for ($i=0; $i <$num_results; $i++)
  9.  {
  10. $row = mysql_fetch_array($result);
  11. PRINT &#092;"<a href=\"unikat.php?unikat={$row[0]}\">Zdjęcie</a>\"; //
  12. PRINT &#092;"<BR>\";
  13.  }
  14.  }
  15. else
  16. PRINT &#092;"Niestety ta oferta nie posiada zdjęć\";
  17.  
  18. ?>

Plik ten wykonuje sie bardzo dlugo, nie wiem dlaczego:( jak go mozna zoptymalizowac?

Tresc pliku unikat.php:
  1. <?php
  2. header('Content-type: image/jpeg');
  3. $sql = &#092;"SELECT foto FROM zdjecia WHERE unikat = '$unikat'\";
  4. $result = @mysql_query($sql, $db);
  5. $dane = @mysql_result($result, 0, 'foto');
  6. $row = mysql_fetch_array ($result);
  7. $num_results = mysql_num_rows($result);
  8.  echo $dane;
  9. ?>


Czyli po kliknieciu na link pod oferta przenosimy sie do pliku foto.php ktory drukuje adresy do poszczegolnych zdjec na podstawie uzyskanych ID z zapytania $sql i dalej po kliknieciu na otrzymany, konkretny juz adres, przenosimy sie do danego zdjecia.

Zalezalo mi, zeby w pliku foto.php nie drukowac adresow typu <a href... tylko od razu <img src= bla bla> zeby wyswietlaly sie od razu obrazki np w jakiejs tabeli ale nie chce to niestety dzialac w ten sposob.
Ociu
Skoro dajesz unikalne id to po wyświetasz wynik pętlą ?
źrebak
bo dla danej sygnatury zawsze jest 'x' zdjec i w petla wydobywam 'unikat' (czyli unikalna nazwe kazdego obrazka) dla danej sygnatury (czyli numeru oferty)
Rastman
A nie lepiej przechowywać zdjęć w katalogu, a w bazie danych tylko url'a typu varchar. wtedy będzie działać dużo szybciej i nie obciążasz bazy danych. Mozesz też spróbować z buforowaniem, powinno trochę przyspieszyć.
pozdrawiam
źrebak
Sprobowac z buforowaniem? Co to znaczy?

Nie moge przechowywac URLow w bazie, poniewaz baza juz jest, zostala stworzona juz dawno i nie wolno mi ingerowac w jej strukture sad.gif.
Rastman
poczytaj w manualu o funkcjach ob_start(), ob_end_flush...
źrebak
no ok, ale buforowanie to moglo by przyniesc jakis skutek przy pliku unikat.php - a ten akurat wykonuje sie dosyc sprawnie.To plik FOTO.php wykonywany jest na maksa wolno - i nie wiem czemu sad.gif
nospor
Cytat
To plik FOTO.php wykonywany jest na maksa wolno - i nie wiem czemu
Być może dlatego że masz zdjęcia w bazie i jest ich może dużo? Porób ewentualnie indexy po sygnaturze jak jeszcze nie masz.
źrebak
No ale w pliku foto.php 'wydobywam' tylko poszczegolne 'id' tych zdjec a nie same zdjecia. Dopiero gdy wyskubie 'id' moge sie do nich odwolac..

Indeksy przy sygnaturze ? Co masz na mysli?
nospor
ja wiem że wydobywasz tylko id. Ale im większa tabela, więcej danych, tym więcej rzeczy trzeba przewertować aby się do czegoś dobrać. Zdjęcia powodują że tabela ci się dość mocno zwiększyla.

Cytat
Indeksy przy sygnaturze ? Co masz na mysli?
No żebyś do tabeli dodał indexowanie po sygnaturze, co powinno ździebko przyspieszyć wyszukiwanie i dobieranie się do danych. Nie wiem jakiego programu używasz do bazy, ale powinno tam ustawianie indexów
źrebak
phpMyAdmin. Jest tam rzeczywiscie taka funkcja, co dokladnie ona spowoduje? Jest tam opcja "Nadanie indexu dla 'x' kolumn."
nospor
Cytat
co dokladnie ona spowoduje
Nie uzywalem phpmyadmin, ale powinno to zalozyc index dla wybranej kolumny
Major
  1. <?php
  2. $sql = &#092;"SELECT unikat FROM zdjecia WHERE sygnatura = '$sygnatura'\"; //unikat to 'id' zdjecia
  3. $result = @mysql_query($sql);
  4. while($row = mysql_fetch_array($result))
  5. {
  6. PRINT &#092;"<a href=\"unikat.php?unikat={$row[0]}\">Zdjęcie</a>\"; //
  7. PRINT &#092;"<BR>\";
  8.  }
  9.  
  10. ?>
?
źrebak
nie moze to byc oparte na while'u, ale zrobilem tak:
  1. <?php
  2.  if ($row = mysql_fetch_array($result))
  3. {
  4. PRINT &#092;"<a href=\"unikat.php?unikat={$row[0]}\">Zdjęcie</a>\"; //
  5. PRINT &#092;"<BR>\";
  6.  }
  7. else 
  8. PRINT &#092;"Ta oferta nie posiada zdjęć\";
  9. ?>

co niestety i tak nie pomoglo. Czas oczekiwania na odpowiedz od serwera czasem jest tak dlugi ze wyskakuje INTERNAL ERROR 500 sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.