Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja blokuje strone
Forum PHP.pl > Forum > PHP
mac310
Stworzyłem sobie funkcję działającą z 4 zmiennymi np. abc (x, y, z, n). Funkcja ma coś tam robić np. wstawiać określony kod html po podaniu określonych zmiennych.
W treści dokumentu np. test.php wstawiam sobie w różnych miejscach sekwencję:
<?php abc (1, 2, 3, 4) ?>
... i wszystko jest OK do chwili gdy tych wystąpień (tego odwołania do funkcji) nie jest zbyt dużo. Po przekroczeniu pewnej wartości strona się nie wyświetla, a jak przerwę wczytywanie strony, to wyświetla się jej niepełna zawartość.
Co jest nie tak?
Czy to wina konfiguracji php, Apacha czy konstrukcji kodu/odwołań do funkcji itp.

Dzięki.

Maciek
mike
Twoja funkcja chyba przeciąża serwer.
Jest to na 99% sytuacja kiedy serwer jest w pożądku ale to Ty (Twój kod zawala sprawę).

Pokaż może kod tej funcji.
I napisz ile razy ją wywołujesz (choć to raczej nie ma znaczenia)
mac310
test.php
  1. <HTML>
  2. <BODY>
  3. Ble ble ble
  4.  
  5. <?php abc (1,2,3,4) ?>
  6. Ble ble ble
  7.  
  8. <?php abc (1,2,3,4) ?>
  9. Ble ble ble
  10.  
  11. <?php abc (1,2,3,4) ?>
  12. Ble ble ble
  13.  
  14. <?php abc (1,2,3,4) ?>
  15.  
  16. itd
  17. </BODY>
  18. </HTML>

wywołanie funkcji zaczyna robić problem jak jest wstawione ponad np. 40 razy

funkcja.txt (includowana do test.php)
  1. <?php
  2. function abc ($x, $y, $z, $n) {
  3. if $n == 1 {
  4. echo ("cośtam $x i $y i moze jeszcze $z");
  5. }
  6. else {
  7. echo ("cośtam innego $x i $y i moze jeszcze $z");
  8. }
  9. }
  10. ?>


poprawiam
---
nospor


Tych If w funkcji jest kilka, ale casłość nie ma więcej niż 20 linii.
DzikiLis
A czy ciągle wywoływana jest z tymi samymi argumentami, tak jak w przykładzie? Bo jeśli tak, to:
  1. <?php
  2.  
  3. $wynik = abc (1,2,3,4);
  4.  
  5. ?>


A w kodzie:
  1. Ble ble ble
  2. <?php echo $wynik ?>
  3. Ble ble ble
  4. <?php echo $wynik ?>
  5. Ble ble ble
  6. <?php echo $wynik ?>
mac310
No nie... tak tylko napisałem z rozpędu. Wywoływane jest za każdym razem z innymi.
bigZbig
No i pewnie tresc funkcji tez jest inna bo wywolanie tej konkretnej - podanej przez Ciebie z pewnoscia nie stwarza problemow.
mac310
OK, jeśli tak, to pakuję właściwy kod... mam nadzieję, że to coś zmieni

Główna część:
  1. <table cellpadding="5" cellspacing="0" width="800" border="0">
  2.  
  3. <!-- S -->
  4. <tr>
  5. <td rowspan="2" width="200">
  6. <?php galeria (6, 1, H, 1); ?>
  7. </td>
  8. <td valign="top">
  9. <b>Efekt spękań cracle glaze.</b>
  10. </td>
  11. </tr>
  12. <tr>
  13. <td valign="bottom">
  14. <?php
  15. galeria (6, 2, H);
  16. galeria (6, 3, H);
  17. galeria (6, 4, H);
  18. ?>
  19. </td>
  20. </tr>
  21. <!-- S -->
  22.  
  23. <!-- S -->
  24. <tr>
  25. <td rowspan="2" width="200">
  26. <?php galeria (7, 1, H, 1); ?>
  27. </td>
  28. <td valign="top">
  29. <b>Postarzona i patynowana szafa.</b>
  30. </td>
  31. </tr>
  32. <tr>
  33. <td valign="bottom">
  34. &nbsp;
  35. </td>
  36. </tr>
  37. <!-- S -->
  38.  
  39. <!-- S -->
  40. <tr>
  41. <td rowspan="2" width="200">
  42. <?php galeria (8, 1, H, 1); ?>
  43. </td>
  44. <td valign="top">
  45. <b>Stiuk wenecki.</b>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td valign="bottom">
  50. &nbsp;
  51. </td>
  52. </tr>
  53. <!-- S -->
  54.  
  55. <!-- S -->
  56. <tr>
  57. <td rowspan="2" width="200">
  58. <?php galeria (10, 1, V, 1); ?>
  59. </td>
  60. <td valign="top">
  61. <b>Relief z gipsu.</b>
  62. </td>
  63. </tr>
  64. <tr>
  65. <td valign="bottom">
  66. <?php galeria (10, 2, H); ?>
  67. </tr>
  68. <!-- S -->
  69.  
  70. <!-- S -->
  71. <tr>
  72. <td rowspan="2" width="200">
  73. <?php galeria (11, 1, H, 1); ?>
  74. </td>
  75. <td valign="top">
  76. <b>Imitacja zardzewiałych blach wykonana na zabudowach gipsowo--kartonowych.</b>
  77. </td>
  78. </tr>
  79. <tr>
  80. <td valign="bottom">
  81. <?php
  82. galeria (11, 2, H);
  83. galeria (11, 3, V);
  84. galeria (11, 4, H);
  85. ?>
  86. </td>
  87. </tr>
  88. <!-- S -->
  89.  
  90. <!-- S -->
  91. <tr>
  92. <td rowspan="2" width="200">
  93. <?php galeria (12, 1, V, 1); ?>
  94. </td>
  95. <td valign="top">
  96. <b>Spatynowane i postarzone sztukaterie.</b>
  97. </td>
  98. </tr>
  99. <tr>
  100. <td valign="bottom">
  101. <?php
  102. galeria (12, 2, H);
  103. ?>
  104. </td>
  105. </tr>
  106. <!-- S -->
  107.  
  108. <!-- S -->
  109. <tr>
  110. <td rowspan="2" width="200">
  111. <?php galeria (1, 1, V, 1); ?>
  112. </td>
  113. <td valign="top">
  114. <b>Drzwi malowane techniką mieszaną przecierki i cracle glaze.</b>
  115. </td>
  116. </tr>
  117. <tr>
  118. <td valign="bottom">
  119. <?php
  120. galeria (1, 2, V);
  121. galeria (1, 3, H);
  122. galeria (1, 4, H);
  123. galeria (1, 5, V);
  124. ?>
  125. </td>
  126. </tr>
  127. <!-- S -->
  128.  
  129. <!-- S -->
  130. <tr>
  131. <td rowspan="2" width="200">
  132. <?php galeria (15, 1, H, 1); ?>
  133. </td>
  134. <td valign="top">
  135. <b>Faktura ściany.</b>
  136. </td>
  137. </tr>
  138. <tr>
  139. <td valign="bottom">
  140. &nbsp;
  141. </td>
  142. </tr>
  143. <!-- S -->
  144.  
  145. <!-- S -->
  146. <tr>
  147. <td rowspan="2" width="200">
  148. <?php galeria (14, 1, H, 1); ?>
  149. </td>
  150. <td valign="top">
  151. <b>Ornamenty.</b>
  152. </td>
  153. </tr>
  154. <tr>
  155. <td valign="bottom">
  156. <?php
  157. galeria (14, 2, H);
  158. galeria (14, 3, V);
  159. galeria (14, 4, H);
  160. galeria (14, 5, V);
  161. galeria (14, 6, H);
  162. galeria (14, 7, H);
  163. ?>
  164. </td>
  165. </tr>
  166. <!-- S -->
  167.  
  168. </table>


Plik z funkcją:
  1. <?php
  2.  
  3. function galeria ($sekcja, $numer, $orientacja, $pozycja) {
  4.  
  5. $nazwa = "$sekcja-$numer-$orientacja";
  6.  
  7. if ($pozycja == "1") {
  8. if ($orientacja == "H") {
  9. echo ("<A href="javascript:otworz('wnętrza','obrazki/$nazwa-hr.jpg',810,610);" title="Kliknij aby powiększyć"><img src="obrazki/$nazwa-lr.jpg" width="200" height="150" border="0" alt="Ładny Gips - galeria"></A>");
  10. }
  11. else {
  12. echo ("<A href="javascript:otworz('wnętrza','obrazki/$nazwa-hr.jpg',610,810);" title="Kliknij aby powiększyć"><img src="obrazki/$nazwa-lr.jpg" width="200" height="267" border="0" alt="Ładny Gips - galeria"></A>");
  13. }
  14. }
  15. else {
  16. if ($orientacja == "H") {
  17. echo ("<A href="javascript:otworz('wnętrza','obrazki/$nazwa-hr.jpg',810,610);" title="Kliknij aby powiększyć"><img src="obrazki/$nazwa-lr.jpg" width="106" height="80" border="0" alt="Ładny Gips - galeria"></A>");
  18. }
  19. else {
  20. echo ("<A href="javascript:otworz('wnętrza','obrazki/$nazwa-hr.jpg',610,810);" title="Kliknij aby powiększyć"><img src="obrazki/$nazwa-lr.jpg" width="60" height="80" border="0" alt="Ładny Gips - galeria"></A>");
  21. }
  22. }
  23.  
  24. }
  25. ?>
  26.  


Czy teraz to coś wyjaśnia?
bigZbig
Wywolujesz galeria (10, 2, H); gdy tymczasem definicja twojej funcji przewiduje 4 argumenty. Wywoluj z czterema np galeria(10, 2, "H", ""); albo nadaj ostatniemu argumentowi wartosc domyslna np.
  1. <?php
  2. function galeria ($sekcja, $numer, $orientacja, $pozycja=false) {}
  3. ?>

Jak pewnie zauwazyles wartosc typu string objalem cudzyslowami.
mac310
Bardzo dziękuję. Ćwiczyłem to wczoraj w nocy i już nie wiedziałem na co patrzę. Wydawało mi się, że jeśli nie podaję argumentu, to jest to jednoznaczne z wartością pustą jak "".
Zmyliło mnie też to, że do pewnego czasu działa, a po wstawieniu kolejnego odwołania, przestaje. Trochę mnie to dziwi.
Jakie jest na to wytłumaczenie?

Jeszcze raz dziękuję smile.gif

Jak się okazało to jeszcze nie do końca pomogło... dopiero jak H i V wziąłem w "" to poszło.
Czyżby bez "" traktował to inaczej?
dtb
bez czudzyslowiow traktuje to jak stala. jezeli stala nie istnieje to zwraca string z nazwa stalej:

echo LOL; // zwroci "LOL"
mike
Cytat(dtb @ 2006-01-12 15:49:34)
bez czudzyslowiow traktuje to jak stala. jezeli stala nie istnieje to zwraca string z nazwa stalej:

echo LOL; // zwroci "LOL"

Nieprawda.

Kod:
  1. <?php
  2.  
  3. echo LOL;
  4.  
  5. ?>


Zwróci:
Cytat
Notice: Use of undefined constant LOL - assumed 'LOL' in C:\usr\www\index.php on line 3
LOL


A dlaczego?
Bo php natrafiając na stałą, której nie ma generuje komunikat o tym że stała taka nie istnieje (można go stłumić odpowiednią konfiguracją dyrektywy error_reporting oraz display_errors), potem domyślnie tworzy ją wstawiając jej wartość taką samą jak jej identyfikator. To dlatego echo jednak wyświetla stałą.
Ale robienie czegoś takiego to błąd.
Tak samo jak stwierdzenie "jezeli stala nie istnieje to zwraca string z nazwa stalej" jest błędne.

P.S.Uogólnienia to śmierć dla sztuki.
Boskie natchnienie tkwi w szczegółach.
tongue.gif
bigZbig
@mike_mech - jestes poeta - przepraszam za te nic niewnoszaca do tematu dygresje winksmiley.jpg

--edit---
Zapomniałem podpisać.
Autorem tego powiedzenia jest Arthur Miller.
Zabij mnie, ale nie wiem kim był. Po prostu zasłyszałem.
~mike_mech
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.