Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Serwis - sklep internetowy nie chce działąć na serwerze lokalnym
Forum PHP.pl > Forum > Przedszkole
andkazm
Witam ,
NA komputerze z os xp 1.5 GB RAm, wgrałem wampa aby dla celów testowych uruchamiać lokalnie serwis www .
I to pojawiły sie problemy :
1. htaccess przystosowany do ssl - usunąłem te pliki i komunikt o błedach kompesji nieobsługiwanej
przez przeglądarkę przestał się pojawiać
2. teraz jednak mam problem :
Warning: mysql_query() expects parameter 2 to be resource, null given in....
i dalej podana jest treść zapytania które nie może zostać wykonane
( i tym samym dynamiczne skonfigurowanie strony nie udaje sie)
0 -
select configuration_key as cfgKey, configuration_value as cfgValue from configuration

Serwis oparty jest na silniku oscommerce , na serwerze produkcyjnym działa ok
Jak można poradzic sobie z tym problemem ?

Andrzej
nospor
A jaki to ma związek z przeglądarka? No żaden. Przenosze.

Co do błędu nr dwa to masz błąd bazy. Postawiłeś w ogóle bazę?
andkazm
Baza jest skoro cytuję komunikat , który dostaję od mysql


A poza tym masz rację co do zmiany miejsca w którym powinien znaleźć się post , jednak skoro masz taką moc sprawczą to może by wątek przenieść do "bazy danych - mysql"
nospor
Cytat
Baza jest skoro cytuję komunikat , który dostaję od mysql
No właśnie nie.... jeśli nie masz bazy zainstalowanej, to właśnie pojawi się taki komunikat. Instalowałeś bazę tego sklepu czy nie? Instalowałeś w ogóle silnik mysql u siebie na kompie? Dwa proste pytania na które możliwa jest tylko jedna prosta odpowiedź: tak lub nie
andkazm
TAK
nospor
Na obydwa pytania odpowiedź TAK?

To znajdź teraz kod, w którym łączysz się z bazą: coś ala mysql_connect oraz mysql_selectdb(). I za tym kodem daj:

die('BLAD:'.mysql_error());
andkazm
Bazę założyłem z backupu . Z tym też był niemały problem , bo najpierw chciałem zrobić restore z aktualnego backupu . W php ini zmieniałem ustawienia dot. wielkości obsługiwanego pliku :
post_max_size = 60M ,
max_input_time: -1 ,
max_execution_time = 0 nie mniej ciągle miałem komunikat , że limit czasu się skończył .
W końcu rozpakowałem mały plik sql ze strukturą wyjściową .
Z bazą się łączę , to działa . Problem jest właśnie j / w .
nospor
A skad wiesz że łączysz się z bazą? Bo widać ewidentnie że twoj skrypt, ma z tym problem. Zastosuj się więc proszę do mojej prośby i zrób ten prosty banalny test. Już pokazałeś, że słabo się orientujesz twierdząc, że ten komunikat
"Warning: mysql_query() expects parameter 2 to be resource, null given in...."
jest komunikatem bazy,
wiec proszę nie wyciągaj innych pochopnych wniosków....

Błąd jaki masz moze wynikać z dwóch rzeczy:
1) Problem połączenia z bazą - to pokaze test o który poraz kolejny proszę.
2) Problem z przekazywanie zmiennej z połączeniem

Narazie skupmy się na pierwszym. Rozumiesz?

edit: a zresztą można od razu zając sie drugim:
w linii co leci komunikat jest taki kod:
mysql_query('zapytanie', $zmienna);
zamien go na :
mysql_query('zapytanie');
bo z komunikatu wynika, że $zmienna jest null. Może chodziaż chwyci aktualne połączenie jeśli jest
andkazm
Masz rację o tyle , że sama treść zapytania które nie wyszło , zwrócona przez serwer w komunikacie o
błędzie o niczym nie świadczy i to było z mojej strony głupie . Nie mniej opieram się na skrypcie , który na początku testuje czy jest połączenie z bazą więc tutaj nie ma wątpliwości .

ALe jednak wykonałem test - zmieniłem w pliku configure.php hasło do bazy danych i
mam zaraz komunikat :

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'andrzej'@'localhost' (using password: YES) in C:\wamp\www\projektcik1\includes\functions\database.php on line 17

wracam do hasła właściwego ustalonego poprzez phpadmina i komunikatu nie ma jest ten jak do tej pory
Warning: mysql_query() expects parameter 2 to be resource, null given in C:\wamp\www\projekcik1\includes\functions\database.php on line 42
nospor
No i super smile.gif
Czyli teraz przechodzimy do punktu nr2: spójrz na mój edit z poprzedniego posta smile.gif
andkazm
ok , wykonam ten Twój test także , moment

sprawa się komplikuje , zapytanie obsługuje następująca funkcja :
  1. function tep_db_query($query, $link = 'db_link') {
  2. global $$link, $debug;
  3. $query_start = microtime();
  4.  
  5. if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
  6. error_log('QUERY ' . $query . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
  7. }
  8.  
  9. $result = mysql_query($query, $$link) or tep_db_error($query, mysql_errno(), mysql_error());
  10.  
  11. if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
  12. $result_error = mysql_error();
  13. error_log('RESULT ' . $result . ' ' . $result_error . "\n", 3, STORE_PAGE_PARSE_TIME_LOG);
  14. }
  15.  
  16. $_start = explode(' ', $query_start);
  17. $_end = explode(' ', microtime());
  18. $_time = number_format(($_end[1] + $_end[0] - ($_start[1] + $_start[0])), 6);
  19.  
  20. $debug['QUERIES'][] = $query;
  21. $debug['TIME'][] = $_time;
  22. $debug['QUERY_TIME'] += $_time;
  23. return $result;
  24. }
  25.  
nospor
nie: $result = mysql_query($query, $$link) or tep_db_error($query, mysql_errno(), mysql_error());
a: $result = mysql_query($query) or tep_db_error($query, mysql_errno(), mysql_error());
Tak nie działa? Aż tyle połączeń robi twój serwis że musisz podawać konkretnie o które chodzi?

edit: zas głównym problemem może byc to, że przy mysql_connect nie podajesz włąsciwej zmiennej.
Pokaz jeszcze kod z mysql_connect()
andkazm
ten fragment kodu wygląda tak :
  1. // include the database functions
  2. require(DIR_WS_FUNCTIONS . 'database.php');
  3.  
  4. // make a connection to the database... now
  5. tep_db_connect() or die('Nie mozna polaczyc sie z baza danych!');
  6.  
  7. // set the application parameters
  8. $configuration_query = tep_db_query('select configuration_key as cfgKey, configuration_value as cfgValue from ' . TABLE_CONFIGURATION);
  9. while ($configuration = tep_db_fetch_array($configuration_query)) {
  10. define($configuration['cfgKey'], $configuration['cfgValue']);
  11. }

i nie wykonuje się to po // set the application parameters
nospor
Po pierwsze: poprawiłeś kod jak prosiłem? Wywaliłes z mysql_query te $$link??

Po drugie: prosiłem o kod z mysql_connect, czyli zapewne o tresc funkcji tep_db_connect() a nie jej wywołanie.
andkazm
dodam jeszcze :
- to wszysto działa bezbłędnie na serwerze produkcyjnym ( usunąłem tylko pliki .htaccess o czym pisałem na początku )

- kiedyś tą stronke uruchamiałem lokalnie na laptopie ( lepsze parametry sprzętu ) z vistą i działało wsio
więc teraz nie rozumiem czy system operacyjny ma znaczenie tutaj ?

wedle życzenia :
  1.  
  2. function tep_db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
  3. if (USE_PCONNECT == 'true') {
  4. $$link = mysql_pconnect($server, $username, $password);
  5. } else {
  6. $$link = mysql_connect($server, $username, $password);
  7. }
  8.  
  9. if ($$link) mysql_select_db($database);
  10. ## tep_db_query("SET NAMES latin2");
  11. return $$link;
  12. }
  13.  
  14. function tep_db_close($link = 'db_link') {
  15. global $$link;
  16.  
  17. return mysql_close($$link);
  18. }
  19.  
nospor
Zrob zmiane co ci pisalem:
nie: $result = mysql_query($query, $$link) or tep_db_error($query, mysql_errno(), mysql_error());
a: $result = mysql_query($query) or tep_db_error($query, mysql_errno(), mysql_error());

a ci zadziała. A jak nie chcesz tego zmieniać to niech ktoś inny się zastanawia czemu te globale nie działają.

ewentulanie do funkcji dopisz global $$link
function tep_db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
global $$link;
//a tu dalej jak było
andkazm
w postaci
  1. mysql_query($query)
idzie cała lista błędów
Warning: mysql_real_escape_string() expects parameter 2 to be resource, null given in C:\wamp\www\projekcik1includes\functions\database.php on line 137
idalej

Deprecated: Function eregi() is deprecated in C:\wamp\www\projekcik1\includes\classes\language.php on line 87

Myślę że muszę to całe środowisko spowrtem zbudować na lapku . Troszke to już za dużo czasu mi zajmuje a w gruncie rzeczy chodzi tylko
o możliwośc sprawdzania jak działa np. slaider , jakiś banner przed wgraniem "na dobre" , bez ingerowania w wygląd strony w wersji produkcyjnej
nospor
widzisz, po wywaleniu tego co ci kazałem, zaczęło ci działać. Niestety w innych cześciach systemu masz ten sam myk, np przy funkcji mysql_real_escape_string() . Jakbyś tam też wywalił te $$link to i tu błędy by zniknęły.

zas eregi nie ma związku z bazą. php informuje cie, że jest to przestarzała funkcja.
andkazm
ale tak troche podsumowując . skąd te różnice w działaniu strony w środowisku tetowym i produkcyjnym , konkretnie
na serwerze "w świecie" to działa bez zarzutu więc zaskoczyło mnie że to co miało zająć niwiele czasu absorbuje mnie już od kilko dni
nospor
A dopisałeś te global jak cię prosiłem? Z jakiegos powodu zmienna $$link nie jest widoczna poza funkcją. Jednym z powodów teoretycznie jest brak globala
andkazm
Dzięki za pomoc ( niestety nie ma sensu zmieniać tego kodu wg wskazówek jakie podałeś ( przechodzić przez cały projekt) ) ,
ale mógłbyś to jakoś wyjaśni ? : skąd te błędy na lokalnym serwerze ?
nospor
Ostatnią zmianę o jaką cię prosiłem to jedne GLOBAL $$link w jednej funkcji. Nigdzie więcej.
andkazm
Dałem tego globala bezczelnie w pliku index.php ( wróciłem też do pierwotnej wersji database.php)
i mam teraz komunikat :

Otwierana strona nie może zostać wyświetlona, ponieważ używa nieprawidłowych lub nieobsługiwanych metod kompresji.

i mam spowrotem jak w p. 1 , to ciekawostka następna .....
nospor
Nie miałeś dawać w żadnym index.php. Napisałem ci wyraźnie gdzie masz go dać...
andkazm
wprowadziłem zmianę w kodzie o którą prosiłeś :
  1.  
  2. function tep_db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
  3. global $$link;
  4.  
  5. // dalej jak było
  6.  
  7.  
  8. if (USE_PCONNECT == 'true') {
  9. $$link = mysql_pconnect($server, $username, $password);
  10. } else {
  11. $$link = mysql_connect($server, $username, $password);
  12. }
  13.  
  14. if ($$link) mysql_select_db($database);
  15. ## tep_db_query("SET NAMES latin2");
  16. return $$link;
  17. }
  18.  



i rezultat dobr : strona zaczęła się wyświetlać ale z błędem ale jest postęp



arning: chdir() [function.chdir]: No such file or directory (errno 2) in C:\wamp\www\projekcik1\includes\classes\oscthumb.php on line 271




mam też komunikat :

Ostrzeżenie: Istnieje możliwość zapisu pliku konfiguracyjnego w lokalizacji: C:/wamp/www/projekcik1/includes/configure.php. Istnieje ryzyko zagrożenia pracy systemu - zmień uprawnienia dla tego pliku.

zmieniam więc atrybuty katalogu a ten wraca uparciedo read only
nospor
No popatrz, tyle próśb o ten jeden global i jednak zadziałało.... wink.gif

Dobra, niech ktoś inny zajmuje się resztą błędów, bo ja już nie mam sił prosić po 5 razy o to samo smile.gif
andkazm
w zasadzie wszystko się wyświetla tylko totalnie rozjeżdża bo jest tabelka z błędami wynikającymi z :

Warning: chdir() [function.chdir]: No such file or directory (errno 2) in C:\wamp\www\cebulki\includes\classes\oscthumb.php on line 271
Call Stack


nie mniej rewelacja ( szacun)
com
no to z tego Warning-a można wszytko wyczytać, nie znajaduje Ci katalogu do którego odwołuje sie chdir() w pliku oscthumb.php w lini 271 wiec otwóz plik sprawdz co to za scieżka i bedziesz wszytko wiedział czemu się sypie, a pytałeś czemu na serwerze produkcyjnym działą a tu nie, to zapewne wina konfiguracji serwera, tam jest inna tu jest inna wink.gif
andkazm
to katalog "cache" tylko nie daje sobie zmienić atrybutów ( oczywiście jest to kopia katologu z hosta) , trzyma uparce read only , system , hidden więc może dlatego tak się dzieje
coś z moim kompem nie tak ...?
com
to stwórz ten katalog ręcznie bez kopi z serwera, bo jak zakladam on jest tak czy tak pustu, a pewnie dane są tam zapisywane podczas generowania strony (smarty itd ) wink.gif a jak nie to przekopuj jego zawartość, bo czasem uprawnienia z serwera sie gryzą z windowsem wink.gif
andkazm
w linii 271 oscthumb.php mam

  1. function _clean_cache() {
  2. // Clean up the cache.
  3. if (chdir($this->cache_dir)) {
  4. if (glob("*.*")!=false)
  5. foreach (glob("*.*") as $filename) {
  6. if (!is_dir($filename)) {
  7. unlink($filename);
  8. }
  9. }
  10. chdir(DIR_FS_CATALOG);
  11. }
  12. }


a wyżej zdefiniowana jest funkcja :

  1. function oscthumb() {
  2. $this->cache_dir = DIR_FS_CATALOG.'phpThumb/cache';
  3. // For now we can change the cache folder only from here.
  4. $this->enabled = CFG_MASTER_SWITCH=="On"? true : false;
  5. }
  6.  



zmieniałem atrybuty , zakładałem nowy katalog a ta wredota
obstaje przy swoim
com
ale dokładnie w tej lini jest która linijka bo chdir() wywołane jest dwa razy raz dla katalogu cache a raz dla DIR_FS_CATALOG który narazie nie wiem co przechowuje biggrin.gif

Btw to sie nazywa funkcja składowa klasy (dawniej metoda) nie myl z funkcja z programowania strukturalnego wink.gif
andkazm
Wywołanie strony wygląda tak :

( ! ) Warning: chdir() [function.chdir]: No such file or directory (errno 2) in C:\wamp\www\abc\projekcik1\includes\classes\oscthumb.php on line 271
Call Stack
# Time Memory Function Location
1 0.0084 711936 {main}( ) ..\index.php:0
2 0.0139 1019136 require( 'C:\wamp\www\abc\projekcik1\includes\application_top.php' ) ..\index.php:30
3 0.1838 3651440 oscthumb->check_hash( ) ..\application_top.php:667
4 0.1866 3652624 oscthumb->_clean_cache( ) ..\oscthumb.php:36
5 0.1866 3652656 chdir ( ) ..\oscthumb.php:271

i dalej mniej lub bardziej rozsypana zawartośc

Uwaga Ostrzeżenie: Istnieje możliwość zapisu pliku konfiguracyjnego w lokalizacji:
C:/wamp/www/abc/projekcik1/includes/configure.php. Istnieje ryzyko zagrożenia pracy systemu - zmień uprawnienia dla tego pliku.
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.