Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Zaawansowane] Problem z bazą danych
no-scared
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 24.04.2008

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


Witam wszystkich.

Otóż mam taki problem, nie mam pojęcia skąd on się bierze, jest dość nietypowy. Mam dwa pliki:

- /linkchecker/index.php - w tym pliku jest formularz, który po jego wysłaniu dodaje linki umieszczone w tym formularzu do bazy danych. Po wykonaniu tej czynności wysyła za pomocą jQuery.get() żądanie do check_links.php.
- /linkchecker/check_links.php - ten plik pobiera wcześniej dodane do bazy linki i za pomocą cURL wchodzi pokolei do każdego z nich i po sprawdzeniu, czy jest poprawny dodaje o tym wpis do bazy danych (Y lub N).

Problem polega na tym, że jak zostanie wysłane żądanie ajax do check_links.php, to trochę czasu je sprawdza (zazwyczaj się dodaje dużo linków) i w tym czasie nie mogę wejść na inny plik (dostaję fatal error dotyczący max_execution_time, dokument się ładuje aż do tego błędu). Udało mi się ustalić, że prawdopodobnie jest to coś z bazą danych, bo utworzyłem plik /linkchecker/test.php, który przy zawartośći:

  1. echo 'asdasdasdasdasd';


wyświetla się natychmiast, natomiast przy zawartości

  1. require_once('includes/common.php');


również się ładuje w nieskończoność (common.php jedyne co robi to łączy z bazą danych)

Wydaje mi się, że może być to problem typu lock tables albo coś z max_user_connections. Ale nie używam nigdzie w skrypcie żadnych rzeczy typu LOCK/UNLOCK TABLES, a w my.ini nie mogę znaleźć nigdzie opcji max_user_connections / max_connections (używam najnowszego XAMPP). Jak rozwiązać ten problem?

Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


A czy w obu plikach używasz sesji? Jeśli tak to może być to - bo sesja też ma lock. Jeśli dwa skrypty naraz próbujesz odpalić na tej samej sesji to się tak nie da - może to to?


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
no-scared
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 24.04.2008

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


Rzeczywiście, mój test.php przy takiej formie:

  1. <?php
  2.  
  3. error_reporting(E_ALL ^ E_NOTICE);
  4.  
  5. require_once('includes/config.php');
  6. require_once('includes/funcs.php');
  7. require_once('includes/classes/user.php');
  8. require_once('includes/classes/curl.php');
  9.  
  10. $conn = new mysqli(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_DATABASE);
  11.  
  12. if (!$conn) {
  13. die('Nie udało się połączyć z bazą danych. Spróbuj później, bądź powiadom o zdarzeniu administrację serwisu.');
  14. }
  15.  
  16.  
  17. ?>


Ładuje się do fatal errora, lecz przy takiej formie:

  1. <?php
  2.  
  3. error_reporting(E_ALL ^ E_NOTICE);
  4.  
  5. require_once('includes/config.php');
  6. require_once('includes/funcs.php');
  7. require_once('includes/classes/user.php');
  8. require_once('includes/classes/curl.php');
  9.  
  10. $conn = new mysqli(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_DATABASE);
  11.  
  12. if (!$conn) {
  13. die('Nie udało się połączyć z bazą danych. Spróbuj później, bądź powiadom o zdarzeniu administrację serwisu.');
  14. }
  15.  
  16. ?>


plik się załaduje. Ale to nie koniec problemu. Bo co w takim razie mam zrobić, jeżeli potrzebuję używać sesji i w jednym i w drugim pliku?

Z tego co widzę, ludzie sobie z tym radzą za pomocą session_write_close(), ale to jest bez sensu... co mam zrobić, jeżeli w innym pliku muszę pewne dane też zapisywać do sesji podczas działania skryptu, a nie mogę ich najpierw odczytać i zamknąć sesji?
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Zasada jest prosta smile.gif

Jeśli w jakimś skrypcie (na ogół chodzi o skrypty wywoływane przez ajax, lub te które się długo ładują) potrzebujesz tylko odczytać sesję to robisz:

  1.  
  2. // i tyle zmienne sesji są dostępne do odczytu (jedynie ich zmiana nie zostanie zapisana w sesji)
  3.  
  4. echo $_SESSION['jakas_zmienna'];


Jeśli potrzebujesz i zapisu i odczytu a skrypt moze się długo wykonywać to wystarczy:

  1.  
  2. // tu jakieś straszne operacje (długotrwałe) + odczyt sesji
  3.  
  4. // teraz zapisujemy wynik do sesji
  5.  
  6. $_SESSION['wynik'] = $wynik;
  7.  
  8. // itd...


Grunt aby w drugim przypadku dany skrypt nic nie echował dopóki nie skończy zabawy z sesją wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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 Aktualny czas: 21.08.2025 - 13:15