webForumDet fria alternativet
Logga in / Bli medlem

Fopen

PHP

2 svar · 258 visningar · startad av esra

Medlem sedan okt. 2000101 inlägg
Trådstart#1

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

Medlem sedan aug. 20002 975 inlägg
#2

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.

Medlem sedan okt. 2000101 inlägg
#3

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

266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)