---
title: "läsa med fgets"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/102776-läsa-med-fgets"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "kris"
published: "2004-05-02T14:15:21.000Z"
updated: "2004-05-03T06:14:09.000Z"
replies: 7
views: 333
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/102776-läsa-med-fgets"
---

# läsa med fgets

## #1 — kris, 2004-05-02T14:15Z

Hallå!

Om jag läser en fil med fgets(), går det då att ställa in så att den slutar läsa vid ett visst tecken, ex. "\|"? Eller finns det något annat kommando för detta?

/kris

Permalänk: https://www.webforum.nu/p/102776

## #2 — Matte, 2004-05-02T15:24Z

fgets läser till det antal byte (minus 1) du angivit, eller till radens slut, beroende på vilket som kommer först.

Du får läsa in det i en variabel, och plocka ut det från variabeln istället.

Permalänk: https://www.webforum.nu/p/1336817

## #3 — kris, 2004-05-02T21:36Z

Problemet jag har är att jag inte vet hur lång strängen är, men jag vet vilket tecken som ligger sist.

/kris

Permalänk: https://www.webforum.nu/p/1337048

## #4 — Matte, 2004-05-02T21:41Z

Du får läsa in hela strängen, och sedan ur den strängen ta ut det du vill ha.

Permalänk: https://www.webforum.nu/p/1337050

## #5 — kris, 2004-05-02T21:52Z

Jag kanske ska förklara mig lite bättre :)
Jag vill göra ett skript som kopplar upp mig mot en server. Servern skickar en text-sträng till klienten och förväntar sig därefter ett svar. Text-strängen kan vara av varierand längd men slutar alltid med ett "\|".

Om servern inte får svar inom en viss tid blir det timeout. Därför har jag lite problem med att använda tex "feof".

Hoppas att det blir lite klarare nu :)

/kris

Permalänk: https://www.webforum.nu/p/1337052

## #6 — Matte, 2004-05-02T22:15Z

Du skulle kunna testa något på det här hållet:

```php
$content = '';

if ($fp = fopen($server, 'r')) {

   while (!feof($fp)) {
      $row = fgets($fp, 4096);
      if (($strpos = strpos($row, "|")) !== false) {
         $content .= substr($row, 0, $strpos);
         break;
      } else {
         $content .= $row;
      }
   }
   fclose($fp);
   
   echo $content;

} else {

   echo "Inget serversvar";

}
```

Permalänk: https://www.webforum.nu/p/1337065

## #7 — kris, 2004-05-02T22:41Z

Tackar tackar! :) verkar funka utmärkt. En fråga till bara: om det finns till exempel tre stycken "\|"-tecken i strängen och jag vill att den ska läsa till det tredje, hur gör jag då?

/kris

Permalänk: https://www.webforum.nu/p/1337081

## #8 — Matte, 2004-05-03T06:14Z

Testa

```php
$content = '';

if ($fp = fopen($server, 'r')) {

   $pinn = 0;
   while (!feof($fp)) {

      $row = fgets($fp, 4096);
      if (strpos($row, "|") !== false) {
        $pinn++;
      }
      $content .= $row;
      if ($pinn > 2) {
         break;
      }

   }
   fclose($fp);

} else {

   echo "Inget serversvar";

}

if (preg_match_all("/[^|]+(?=\|)/is", $content, $matches)) {
   $strings = $matches[0];
} else {
   $strings = array();
   echo "Ingen sträng hittades";
}

Foreach ($strings as $key => $val) {
   echo ($key+1).": $val <br>\n";
}
```

Permalänk: https://www.webforum.nu/p/1337137

---

Tråden på webben: https://www.webforum.nu/amne/php/102776-läsa-med-fgets
