Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]pomoc w optymalizacji kodu
źrebak
post 9.05.2005, 14:42:11
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Ociu
post 9.05.2005, 15:20:58
Post #2





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Skoro dajesz unikalne id to po wyświetasz wynik pętlą ?
Go to the top of the page
+Quote Post
źrebak
post 9.05.2005, 18:08:39
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


bo dla danej sygnatury zawsze jest 'x' zdjec i w petla wydobywam 'unikat' (czyli unikalna nazwe kazdego obrazka) dla danej sygnatury (czyli numeru oferty)
Go to the top of the page
+Quote Post
Rastman
post 9.05.2005, 19:05:11
Post #4





Grupa: Zarejestrowani
Postów: 177
Pomógł: 0
Dołączył: 6.06.2004

Ostrzeżenie: (20%)
X----


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


--------------------
Go to the top of the page
+Quote Post
źrebak
post 9.05.2005, 20:32:56
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Rastman
post 9.05.2005, 22:23:39
Post #6





Grupa: Zarejestrowani
Postów: 177
Pomógł: 0
Dołączył: 6.06.2004

Ostrzeżenie: (20%)
X----


poczytaj w manualu o funkcjach ob_start(), ob_end_flush...


--------------------
Go to the top of the page
+Quote Post
źrebak
post 10.05.2005, 10:14:59
Post #7





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post 10.05.2005, 10:19:28
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
źrebak
post 10.05.2005, 10:45:34
Post #9





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post 10.05.2005, 10:51:05
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
źrebak
post 10.05.2005, 10:55:31
Post #11





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


phpMyAdmin. Jest tam rzeczywiscie taka funkcja, co dokladnie ona spowoduje? Jest tam opcja "Nadanie indexu dla 'x' kolumn."
Go to the top of the page
+Quote Post
nospor
post 10.05.2005, 11:09:58
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
co dokladnie ona spowoduje
Nie uzywalem phpmyadmin, ale powinno to zalozyc index dla wybranej kolumny


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Major
post 10.05.2005, 11:52:40
Post #13





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 22.07.2004

Ostrzeżenie: (0%)
-----


  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. ?>
?


--------------------
Udzielasz sie w PHP Pro?
Uważasz sie za profesjonaliste?
Przeczytaj to
Go to the top of the page
+Quote Post
źrebak
post 10.05.2005, 12:26:23
Post #14





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 4.05.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 02:14