mikaeledMedlem sedan dec. 2000157 inlägg <?
echo "hej";
$stock = fopen("http://www.searchfeed.com/rd/SearchResults.jsp?SearchString=internet", "r");
if (!$stock) {
echo "<p>Får ingen kontakt med sidan.\n";
exit; }
$i = 0;
$max = 10;
$retur ="";
while (!feof($stock)) {
$line = fgets($stock, 1024);
$i++;
if (eregi(" <a href='/rd/AdvertiserInfo.jsp'>(.*)</a>", $line, $out) or die(hej)); {
}
if ($i==$max) { break; }
}
fclose($stock);
echo "$out[1]<br>";
?>
Varför fungerar inte detta?
[Redigerat av mikaeled den 07 jan 2002]
Av en hel del anledningar:
1. Du läser bara in de 10 första raderna, vilka är helt tomma. Själva HTML-koden startar först på rad 15 och den första länken som skulle kunna matcha ditt reg-uttryck finns på rad 300.
2. Om ditt reguljära uttryck inte uppfylls vid kontroll av den första inlästa raden så kommer scriptet att avbryta med die().
3. Ditt reguljära uttryck är något felaktigt.
Så här skulle du kunna göra:
<?
$stock = fopen("http://www.searchfeed.com/rd/SearchResults.jsp?SearchString=internet", "r");
if (!$stock) {
die("Får ingen kontakt med sidan.\n");
}
$i = 0;
$max = 350;
$result = "inget data funnet";
while (!feof($stock) || $i == $max) {
$line = fgets($stock, 1024);
$i++;
if (eregi(".*<a href='/rd/AdvertiserInfo.jsp'>(.*)</a>", $line, $out)) {
$result = $out[1];
break;
}
}
fclose($stock);
echo "$result<br>";
?>
> Läs in nya rader tills dess att slutet nåtts eller det att maxgränsen uppnåtts.
> Om en rad matchar det reguljära uttrycket, lägg till det utplockade värde i $result och avbryt loopen, annars fortsätta läsa rader.
> Skriv ut $result. Om inget data hittats så kommer $result att innehålla standardvärdet "inget data funnet", annars innehåller den det utplockade värdet.
------------------
Peer's Law
The solution to a problem changes the problem.
[Redigerat av sgtpepper den 07 jan 2002]
mikaeledMedlem sedan dec. 2000157 inlägg det funkar fint. tack
men hur gör jag om jag vill skriva ut andra? $out[2] funkar ej
Jag trodde att du bara ville ha den första träffen, eftersom du byggt ditt script på så sätt.
Vill du skriva ut alla träffar så får du modifiera det. Istället för att avbryta loopen vid match så skriver du ut träffen och fortsätter:
if (eregi(".*<a href='/rd/AdvertiserInfo.jsp'>(.*)</a>", $line, $out)) {
echo $out[1]."<br>";
}
------------------
Peer's Law
The solution to a problem changes the problem.
mikaeledMedlem sedan dec. 2000157 inlägg jag var tyvärr lite otydligt.
jag vill att $out[1] ska innehålla första och osv
$out[2] ska innehålla andra resultaten. osv
Ok, gör så här istället:
if (eregi(".*<a href='/rd/AdvertiserInfo.jsp'>(.*)</a>", $line, $out)) {
$result[] = $out[1];
}
Resultatet kommer hamna i $result[0], $result[1] osv.
------------------
Peer's Law
The solution to a problem changes the problem.
mikaeledMedlem sedan dec. 2000157 inlägg Fick detta felet:
Fatal error: [] operator not supported for strings in /home1/smozle/public_html/system.php on line 13
<?
$stock = fopen("http://www.searchfeed.com/rd/SearchResults.jsp?SearchString=gambling", "r");
if (!$stock) {
die("Får ingen kontakt med sidan.\n");
}
$i = 0;
$max = 350000;
$result = "inget data funnet";
while (!feof($stock)) {
$line = fgets($stock, 1024);
$i++;
if (eregi(".*<a href='/rd/AdvertiserInfo.jsp'>(.*)</a>", $line, $out)) {
$result[] = $out[1];
}
}
fclose($stock);
echo "$result[0]<br>$result[1]<br>$result[2]";
?>
Rad 13:
if (eregi(".*<a href='/rd/AdvertiserInfo.jsp'>(.*)</a>", $line, $out)) {
2basMedlem sedan juni 2001181 inlägg Tyvärr har du råkat få $result att vara både en sträng och en array.
Byt ut $result="inget data funnet" till $result[]="inget data funnet" ,
/r nu kanske tom jag fattar vad jag skrev
------------------
rutangis
[Redigerat av 2bas den 07 jan 2002]