![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Co poprawić aby ten skrypt zadziałał na wersji php> 4.0?
Skrypt: [php:1:f1c4683dc3]<? echo "<BODY bgColor=#6699FF leftMargin=15 topMargin=5><br>"; function sprawdz($plik) { global $lancuch; $il=0; $file = fopen($plik,"r"); while(!feof($file)) { $linia = strtoupper(fgets($file,100)); $pozycja = strpos($linia,$lancuch[0]); if(is_integer($pozycja)) { while(is_integer($pozycja)) { $l=strstr($linia,$lancuch); $m=strstr($linia,".".$lancuch); if(strlen($l)>0&&!$m) { $linia=substr($l,strlen($lancuch)-1); ++$il; } else break; $pozycja = strpos($linia,$lancuch[0]); } } } fclose($file); return $il; } function szukaj($w) { global $ilosc; global $co; global $katal; $kat = dir($w); $i=0; while($nazwa=$kat->read()) { $tab[$i]=$nazwa; ++$i; } for($i=0;$i<count($tab);$i++) { if(strpos($tab[$i],".")==0&&$i>1) { szukaj($w."/".$tab[$i]); } else { list($nazwa, $rozszerz) = explode(".",$tab[$i]); if($rozszerz=="htm") { $il=sprawdz($w."/".$tab[$i]); if($il>0) { $ilosc[] = $il; $co[] = $tab[$i]; $katal[] = $w; } } } } } $ilosc = array(); $co = array(); echo $ilosc; $katal = array(); $lancuch = strtoupper($lancuch); echo $lancuch; szukaj("/Inetpub/wwwroot/www"); $zmienna=0; if(count($ilosc)>0) {echo $ilosc; for($i=0;$i<count($ilosc);$i++) for($j=$i+1;$j<count($ilosc);$j++) if($ilosc[$j]>$ilosc[$i]) { $zmienna=$ilosc[$j]; $ilosc[$j]=$ilosc[$i]; $ilosc[$i]=$zmienna; $zmienna=$co[$j]; $co[$j]=$co[$i]; $co[$i]=$zmienna; $zmienna=$katal[$j]; $katal[$j]=$katal[$i]; $katal[$i]=$zmienna; } for($i=0;$i<count($ilosc);$i++) {echo $co[$i]; echo "Na stronie <a target=glowna href="".$co[$i].""> ".$co[$i]." </a> znaleziono ".$ilosc[$i]." takich wyrazów<br>n"; } } else echo "Nie znaleziono!"; ?>[/php:1:f1c4683dc3] zamiast global $lancuch wstawiłem na samym początku skryptu : $lancuch=$_POST['lancuch']; i zmienna lancuch jest poprawnie pobierana z formularza. cos nie tak jest później może ze zmiennymi $co, $ilosc i $katal? Dodam jeszcze, że przy register_globals = On skrypt działa. Proszę o pomoc i z góry dziękuję. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Trochę błedów typu otwarta pętla i niezakończona znakiem } itd.
Poza tym wydaje mi się, że funkcja szukaj() nic nie zwraca, ponieważ brak instrukcji return() lub argumentów przekazywanych przez odwołanie, czyli np. &$katalog - eee, sam już nie wiem. Opisz krótko co każda funkcja robi. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Funkcja sprawdz plik pszeszukuje plik linia po lini za danym wyazem. Funkcja szukaj pomaga przeszukać katalogi w katalogach w poszukiwaniu pliku. Później wyświetlane są już tylko wyniki. Skrypt działa na wcześniejszych wersjach php. Czy zostało coś jeszcze zmienione w nowszych wersjach (php >4.0)?
Mozna uruchomić ten skrypt przy ustawionych register_globals na on i działa! Więc co przeoczyłem? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Wydaje mi się, że gdzieś musiałeś zapomniec w odwołaniu się do $_POST/GET. Wysstarczy jedna zapiomniana zmienna i skrypt leci w kosmos.
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Czy zamiana zmiennych globalnych np. global $lancuch; na wyrażenia typu $_POST['lancuch']; mają sens tylko przy pobieraniu zmiennych z zewnątrz? Czy może np. global $ilosc która nie ma źródła na zewnątrz skryptu powinna być zmieniona na podobną formułę?
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
superglobale wykorzystuje się tylko, jeśli zmienna pochodzi z odpowiedniego źródła.
Jesli zmienna jest wykorzystywana i definiowana/deklarowana wewnątrz sktyptu, to wystarcza albo przekazania jej jako paramert funkcji, albo odwołanie do niej przez global. -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ja pobieram tylko z zewnętrznego źródła zmienną $lancuch. Pierwotnie jako global $lancuch skrypt dziala. Po zamianie na $lancuch=$_POST['lancuch']; i wywaleniu linijki global $lancuch; skrypt nie działa. Gdzie jest błąd? Czy to jest w 100% równoznaczne:
global $lancuch; i $lancuch=$_POST['lancuch'];? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Zaraz, zaraz. w którym miejscu masz owe[php:1:c777972921]$lancuch = $_POST['lancuch'];[/php:1:c777972921]?
Jesli poza funkcjami, to samo global powinienes pozostawić, lub też: usunąć to co powyżej, a każde wystapienie $lancuch zamienić na $_POST['lancuch']. -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Dałbym głowę że wczoraj o 2.00 w nocy przy pozostawieniu global $lancuch w funkcji i linijce przed nimi: $lancuch=$_POST['lancuch']; skrypt wyświetlał mi często spotykany w sieci błąd "Empty delimiter". Po twoich wskazówkach uruchomiłem go jeszcze raz w takiej postaci i... działa :oops: . Przepraszam za kłopot i dziękuję za cenne wskazówki.
P.S. O 2 w nocy lepiej nie pisać skryptów. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 16:58 |