Pytanko o niechciane zachowanie funkcji PHP

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
one_eddie
Nowy
Nowy
Posty: 106
Rejestracja: sob sty 17, 2004 11:48 am
Lokalizacja: Polska

Pytanko o niechciane zachowanie funkcji PHP

Post autor: one_eddie »

Napisalem sobie prosty skrypcik.
Przeszukuje on folder, odczytuje dane zawarte w plikach.
Teraz jesli ktos chce cos znalezc podaje to w odpowiednim polu, skrypcik szuka tych informacji w plikach i wyswietla.

Sa to pliki tekstowe.

Problem jest w tym ze wszystko bylo tworzone pon winde + PHPtriad - i w tym przypadku wszystko jest ok, kazde zapytanie zostanie obsluzone. Ale kiedy wrzucilem to na linuxa+PHP, to samo zapytanie do bazy nie pokazuje zadnych rezultatow???

Co moze byc tego przyczyna?
Zla konfiguracja PHP, zle prawa do plikow (watpie), czy ograniczenia systemowe (powiazane z konfiguracja)?
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: wixor »

Z mojego doświadczenia: jeżeli cokolwiek działa na wind***sie to znaczy, że jest schrzanione, bo wind***s z definicji nie działa... Tak serio, to to powyżej jest prawdą... Przyczyn Twojego problemu może być więcej niż błędów w wind**sie (jeżeli to w ogóle możliwe). Gdybyś podał skrypt, powiedziałbym cos więcej...
one_eddie
Nowy
Nowy
Posty: 106
Rejestracja: sob sty 17, 2004 11:48 am
Lokalizacja: Polska

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: one_eddie »

Prosze bardzo oto moj skrypt:

Kod: Zaznacz cały

		$arFiles = ListDir("txt/");
		for ($i =0; $i < count($arFiles); $i++)
		{
			if (substr($arFiles[$i], 0, 3) != "bs_")
				continue;

			$arTimeFile = file("txt/{$arFiles[$i]}");
			$arCityNames = explode("|", $arTimeFile[0]);
			for ($b = 1; $b < count($arTimeFile); $b++)
			{
				// Dziuelimy linie
				list($strPrzyjazd, $strKierunek, $strPrzez, $strOdjazd) = explode("|", $arTimeFile[$b]);
				if ((!(stripos($strKierunek, $BusTo) === FALSE) || !(stripos($strPrzez, $BusTo) === FALSE)) && in_array_cin($BusFrom, $arCityNames))
				{
					// wyswietlam dane

				}

			}
		} // for
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: wixor »

Dalej Ci nie pomogę bo nie dałes funkcji ListDir i in_array_cin!! Spróbuj powstawiać co jakiś czas echa. np: print_r($arFiles); po ListDirze i zobacz w którym miejscu wynij nie jest taki jak zwykł być. (a jak to nic nie da to daj na forum te funkcje i może przykładowy plik .txt.)
PS.
Ja piszę false małymi literami i nie zdziwiłbym się gdyby pod win***owsem PHP nie rozróżniało...
one_eddie
Nowy
Nowy
Posty: 106
Rejestracja: sob sty 17, 2004 11:48 am
Lokalizacja: Polska

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: one_eddie »

to bylo pierwsze co zrobilem.
ale listowanie katalogu jest ok.
Do tej pory udalo mi sie ustalic ze probrlemem jest porownywanie.
Windows nie rozriznia malych i wielkich liter a linux tak i to moze byc problemem.

Kod: Zaznacz cały

function stripos($haystack, $needle, $offset=0)
{ 
	return strpos(strtolower($haystack), strtolower($needle), $offset);
} 

function in_array_cin($strItem, $arItems)
{
	$bFound = FALSE;
	foreach ($arItems as $strValue)
	{
		if (strcasecmp($strItem, $strValue) == 0)
			$bFound = TRUE;
	}
	return $bFound;	
}
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: wixor »

[php]<?php
$arTimeFile = file("txt/{$arFiles[$i]}");
?>[/php]
Czy pliki mają nazwę {coścoścoś} ??
zamiast stripos możesz chyba użyć strcasecmp.
problemem jest porównywanie - ok. które?? Rozbij ten długaśny warunek na kilka mniejszych i powstawiaj echa, a powinno sie pokazać które porównywanie jest złe...
one_eddie
Nowy
Nowy
Posty: 106
Rejestracja: sob sty 17, 2004 11:48 am
Lokalizacja: Polska

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: one_eddie »

Nie pliki maja nazwy bs_nazwa.txt.

A ja lapie w klamry bo tak jest najbezpieczniej chyba.

Juz probowalem z wszystkimi mozliwosciami porownywania stringow.

Probowalem zawet stristr - no bo jesli sa rowne to jeden zawiera sie w drugim tak?

Ale caly czas ten sam efekt jak bym tego nie napisal na windows jest ok a na linuchu PHP daje dupy :(
Krzysztof Aszkiełowicz
Zaczyna działać
Zaczyna działać
Posty: 458
Rejestracja: pn maja 26, 2003 9:29 pm
Lokalizacja: Warszawa
Kontakt:

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: Krzysztof Aszkiełowicz »

Ja w PHP piszę pod WIndowsem, gdy uploaduję na serwer nie mam żadnych kłopotów z odczytem/zapisem musze tylko mieć ustawione odpowiednie chmody. Nie mam pojęcia co jest nie tak w Twoim kodzie :roll:
one_eddie
Nowy
Nowy
Posty: 106
Rejestracja: sob sty 17, 2004 11:48 am
Lokalizacja: Polska

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: one_eddie »

Juz wiem problemem jest funkcje porownujace, przeszukujące stringi.
Odkrylem ze nie radzą sobie z porównywaniem polskich znaków.

Jak to sprawdzilem?

Kod: Zaznacz cały

	if (strcasecmp("ż", "Ż") == 0)
		$BodyHTMLData .= "zZ true<br>";
	else
		$BodyHTMLData .= "zZ false<br>";

	if (stristr("ż", "Ż") == 0)
		$BodyHTMLData .= "stristr zZ true<br>";
	else
		$BodyHTMLData .= "stristr zZ false<br>";

	$BodyHTMLData .= "str to lower: " . strtolower("Ż") . "<br>";	
	$BodyHTMLData .= "str to lower: " . strtolower("ż") . "<br>";	

	$BodyHTMLData .= "str to upper: " . strtoupper("Ż") . "<br>";	
	$BodyHTMLData .= "str to upper: " . strtoupper("ż") . "<br>";	
Wynik byl taki odpalony na linuxie:

zZ false
stristr zZ true
str to lower: Ż
str to lower: ż
str to upper: Ż
str to upper: ż

i co wy na to??
one_eddie
Nowy
Nowy
Posty: 106
Rejestracja: sob sty 17, 2004 11:48 am
Lokalizacja: Polska

Re: Pytanko o niechciane zachowanie funkcji PHP

Post autor: one_eddie »

Ufffffff.
Problem byl takei jak napisalem.

Po wywolaniu funkcji setlocale(LC_ALL, "pl");
funkcje porownojace nei maja juz takich zgrzytów.

Dzieki za pomoc.
ODPOWIEDZ