Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze starym skryptem
Forum PHP.pl > Forum > PHP
DanielBB
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ę.
spenalzo
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.
DanielBB
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?
scanner
Wydaje mi się, że gdzieś musiałeś zapomniec w odwołaniu się do $_POST/GET. Wysstarczy jedna zapiomniana zmienna i skrypt leci w kosmos.
DanielBB
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łę?
scanner
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.
DanielBB
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'];?
scanner
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'].
DanielBB
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.
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.