esraMedlem sedan okt. 2000131 inlägg
Hej!
Sitter och försöker lära mig hur detta med fopen fungerar. Är helt grön på detta :OO
Jag vill läsa in en fil från en webbsida och så långt är allting väl, men jag vill inte ha all kod från filen utan först ifrån en kodrad där det står <!--BEGIN_OLD_LINKS--> och 100 kodrader framåt i filen. Går det att begränsa inläsningen på detta sätt?
Just nu lyder min kod...
<?php
$url = 'http://www.websidan.com/filen.shtml';
$content = '';
if ($fp = @fopen($url, "r")) {
while (!feof ($fp)) {
$content .= fgets($fp, 1);
}
fclose($fp);
} else {
echo "Gick inte att hämta från $url";
}
?>
Just där har jag alltså hela sidans innehåll i variabeln $content
Tacksam för hjälp
mvh / esra
MatteMedlem sedan aug. 20002 970 inlägg
Först. Att läsa en byte i taget är lite segt. Öka på siffran lite, t.ex
$content .= fgets($fp, 1024);
Du vet hur koden ser ut där den börjar. Hur ser den ut efter dina 100 rader ?
För att ta fram sidans innehåll efter <!--BEGIN_OLD_LINKS-->
preg_match("/<!--BEGIN_OLD_LINKS-->(.*)/si", $content, $match);
Nu finns detta innehåll i variabeln $match[1].
Nu skulle man ha kunnat dela upp denna kod i en array, behållit 100 rader samt slått ihop arrayen till sträng igen.
Men enklare hade det varit om du vetat hur koden såg ut efter de hundra raderna.
Då hade du gjort så här för att begränsa hur långt du ska hämta
preg_match("/<!--BEGIN_OLD_LINKS-->(.*?)kod_efter/si", $content, $match);
Alternativt kunde du fixat något redan när du läste filen:
$url = 'http://www.websidan.com/filen.shtml';
$content = '';
$i = 0;
if ($fp = @fopen($url, "r")) {
while (!feof ($fp)) {
$line = fgets($fp, 1);
if (false !== stristr('<!--BEGIN_OLD_LINKS--> ') || $i > 0) {
$content .= $line;
// Eventuellt, då jag inte minns om fgets tar med radslutsmärke eller ej
// $content .= $line."\n";
$i++;
}
if ($i == 100) {
break;
}
}
fclose($fp);
} else {
echo "Gick inte att hämta från $url";
}
?>
PS
fopen-delen hade du redan fixat i och med att du fick hem ditt värde till $content :)
Vad frågan handlade om var hur du kunde ta ut en viss del av innehållet du hämtade.
esraMedlem sedan okt. 2000131 inlägg
Klockrent!
Dessutom är det så att de hundra raderna slutar med kodraden
<!--END_OLD_LINKS--> när jag kollade lite nogare (ganska logiskt...).
Tack Matte! :birp