Avatar billede rasmus_a Nybegynder
04. november 2004 - 10:52 Der er 71 kommentarer og
1 løsning

Læse første 3 bogstaver i anden linie i fil

Hej

Jeg har brug for at læse, og skrive, de tre første tal - i anden linie, i en fil på min server.
Hvordan gør man det? Jeg har lavet et script der læser HELE anden linie, men det er desværre for meget.

Mvh
Rasmus
Avatar billede detox Nybegynder
04. november 2004 - 11:08 #1
Fx:

$fil = 'fil.txt';
$fp = fopen($fil, "r");
fgets($fp); // drop første linje
$str = fgets($fp,3); // Læs 3 første karakterer i anden linje
fclose($fp);
Avatar billede detox Nybegynder
04. november 2004 - 11:11 #2
$str = fgets($fp,3); // Læs 3 første karakterer i anden linje

skulle være:

$str = fgets($fp,4); // Læs 3 første karakterer i anden linje

da den læser length - 1 (altså 3).
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:13 #3
to min, champ. tester lige. tak
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:16 #4
"Warning: Wrong parameter count for fgets()"
Avatar billede detox Nybegynder
04. november 2004 - 11:21 #5
Hvilken php version bruger du? Prøv:

fgets($fp, 1024); // drop første linje
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:23 #6
det tør jeg ikke at sige - men det kan man finde ud af med et script ik? (jeg uploader direkte til et webhotel - har ikke PHP installeret på min maskine, desværre)

prøver lige det der, 2 sek
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:24 #7
nu kommer der ingen fejl men siden er også bare blank.
Avatar billede detox Nybegynder
04. november 2004 - 11:26 #8
Du kan finde versionen med:

echo phpversion();

De 3 karakterer ligger i $str, så hvis du vil se dem skal du tilføje en:

echo $str;
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:31 #9
stadigvæk blank, php version 4.1.2
Avatar billede detox Nybegynder
04. november 2004 - 11:35 #10
Det er en lidt oldnordisk version de har der ;o)
Prøv at tjekke den ved at udskrive længden på $str:

echo strlen($str);
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:40 #11
hehe, beklager :) to sek.
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:41 #12
den skriver bare et "0"
Avatar billede detox Nybegynder
04. november 2004 - 11:42 #13
Hmm, hvordan ser din kode ud nu?
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:44 #14
tada:

<?php
$fil = 'http://xxx/toc.php';
$fp = fopen($fil, "r");
fgets($fp, 1024);
$str = fgets($fp,4);
echo strlen($str);
echo phpversion();
fclose($fp);
?>
Avatar billede rasmus_a Nybegynder
04. november 2004 - 11:45 #15
den skriver helt præcist: "04.1.2" (fordi php versionen også er med)
Avatar billede detox Nybegynder
04. november 2004 - 12:00 #16
Koden virker fint hos mig (med en anden url selvfølgelig), så det er jeg ikke sikker på hvorfor den ikke gør hos dig?
Avatar billede rasmus_a Nybegynder
04. november 2004 - 12:02 #17
det var da en skam..
Avatar billede detox Nybegynder
04. november 2004 - 12:13 #18
Måske er det noget med genkendelsen af 'newline' der driller. fgets() skulle læse indtil enten den angivne længde eller 'newline'. Fx Macintosh laver nogle specielle 'newline' koder. Ved du hvilken computer filen er lavet på/ligger på?
Avatar billede rasmus_a Nybegynder
04. november 2004 - 12:27 #19
jeg ved ikke hvad den ligger på, men den er skrevet på en pc og uploadet på en mac.
Avatar billede detox Nybegynder
04. november 2004 - 12:35 #20
Du kan prøve med:

ini_set('auto_detect_line_endings', 1);

øverst i scriptet.
Avatar billede detox Nybegynder
04. november 2004 - 12:36 #21
Næ, det virker først fra php > 4.3.0
Avatar billede olebole Juniormester
04. november 2004 - 12:37 #22
<ole>

$fil = 'http://xxx/toc.php';
$aFil = file($fil);
$line = trim($aFil[0]);

print substr($line, 0, 4);

/mvh
</bole>
Avatar billede olebole Juniormester
04. november 2004 - 12:38 #23
Oooops ... det skulle være anden linie  ;o)

$fil = 'http://xxx/toc.php';
$aFil = file($fil);
$line = trim($aFil[1]);

print substr($line, 0, 4);
Avatar billede detox Nybegynder
04. november 2004 - 12:40 #24
ole -> Og kun 3 karakterer ;O)
Avatar billede olebole Juniormester
04. november 2004 - 12:41 #25
Nåja ... så er der zq lidt at vokse i  ;D

print substr($line, 0, 3);
Avatar billede detox Nybegynder
04. november 2004 - 12:42 #26
ole -> Hvis det er en stor fil, er det jo lidt ærgeligt at skulle hente hele filen for at læse 3 bogstaver.
Avatar billede olebole Juniormester
04. november 2004 - 12:44 #27
Et lille ekstra ord om file(): Funktionen returnerer et dokuments indhold som et array af linier. Normalt bør man undgå den, hvis man ikke har brug for at kunne læse filen 'binary-safe' (binary-safe gør funktionen langsom).
Her er dette dog ikke noget problem, da PHP-versionen er fra før, file() blev binary-safe  ;o)
Avatar billede rasmus_a Nybegynder
04. november 2004 - 12:46 #28
hmm, det virker fint med første linie men lige så snart man ændrer 0 til 1 så returnerer den intet. Har prøvet med 2 forskellige filer.
Avatar billede olebole Juniormester
04. november 2004 - 12:47 #29
detox >> Ja, det er helt korrekt, men det må komme anpå fil-størrelsen og hvor ofte, den skal læses.
Det var blot for at vise en anden mulighed ... og nu driblede I jo lidt rundt med problemer vedr. forskellige 'etniske' tegn - og noget  ;o)
Avatar billede detox Nybegynder
04. november 2004 - 12:48 #30
Min mistanke er at den ikke kan finde EOL (End Of Line), muligvis noget macintosh værk.
Avatar billede olebole Juniormester
04. november 2004 - 12:50 #31
$fil = 'http://xxx/toc.php';
$aFil = file($fil);
for ($i=1; $i<count($file); $i++) {
    if ( trim($file[$i])<>"" ) break;
}
$line = trim($aFil[$i]);

print substr($line, 0, 3);
Avatar billede rasmus_a Nybegynder
04. november 2004 - 12:53 #32
to sek
Avatar billede rasmus_a Nybegynder
04. november 2004 - 12:54 #33
parse error
Avatar billede olebole Juniormester
04. november 2004 - 12:56 #34
Hvad har du lavet galt? Hvilken linie får du den parse error i?
Avatar billede olebole Juniormester
04. november 2004 - 12:58 #35
Du må selv have introduceret den fejl - for den ligger ikke i min kode  :)
Avatar billede detox Nybegynder
04. november 2004 - 13:03 #36
ole -> Du bruger en undefined variabel: $file (hvilket dog ikke giver den parse error)
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:05 #37
jeg har bare copy&paste'et det du skrev :) med anden fil adresse naturligvis.

fejlen ligger i følgende linie:
    if ( trim($file[$i])<>"" ) break;
Avatar billede detox Nybegynder
04. november 2004 - 13:07 #38
Skulle nok være:

$fil = 'http://xxx/toc.php';
$aFil = file($fil);
for ($i=1; $i<count($aFil); $i++) {
    if ( trim($aFil[$i])<>"" ) break;
}
$line = trim($aFil[$i]);

print substr($line, 0, 3);
Avatar billede olebole Juniormester
04. november 2004 - 13:07 #39
Nej, der er ingen parse errors. Det _kan_ der ikke være. Det _er_ noget, du selv har introduceret.
Du har helt ret detox (man skal passe på med at lave to ting på én gang):

$fil = 'http://www.google.dk';
$aFil = file($fil);
for ($i=1; $i<count($aFil); $i++) {
    if ( trim($aFil[$i])<>"" ) break;
}
$line = trim($aFil[$i]);

print substr($line, 0, 3);
Avatar billede detox Nybegynder
04. november 2004 - 13:14 #40
Prøv at tjekke denne bug der relaterer til din php version:
http://bugs.php.net/bug.php?id=16521
Avatar billede detox Nybegynder
04. november 2004 - 13:17 #41
Du kan så prøve med:

$fil = 'http://xxx/toc.php';
$fp = fopen($fil, "r");
$data = fread($fp, filesize($fil));
fclose($fp);
$lines = explode("\r", $data);
echo substr($lines[1], 0, 3);
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:17 #42
så lykkedes det - jeg slettede indrykket på førnævnte linie. er bange for min editor havde sat nogle mærkelige tegn ind.. :( (mac) - smid et svar! og tak for hjælpen
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:19 #43
lige en ting mere:

jeg har en anden fil der starter med:
<?php die("No access allowed."); ?>

jeg prøvede lige at læse de samme tal i den linie (fra en nyedsscript på min side) men det gad den ikke.. kan man komme uden om det?
Avatar billede detox Nybegynder
04. november 2004 - 13:23 #44
Det skulle ikke gøre nogen forskel, hvad der står i den første linje.
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:26 #45
er du sikker? jeg synes ikke jeg kan få dette script til at læse nogle filer med dét som den første linie - alle andre virker dog fint.
Avatar billede detox Nybegynder
04. november 2004 - 13:28 #46
Ja, du læser jo kun fra filen. Du udfører jo ikke noget fra scriptet.
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:30 #47
det var dog besynderligt.
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:34 #48
Jeg har lige lavet en fil. Den ser sådan ud:

<?php die("No access allowed."); ?>
123
321

Da jeg brugte olebole's script returnerede den intet.
Så slettede jeg den første linie så filen bare indeholdt:

123
321

Da returnerede præcis samme script:
321

...?
Avatar billede olebole Juniormester
04. november 2004 - 13:38 #49
Mit script vil med den fejl, der er i den aktuelle PHP-version, kun læse første linie - så den første linie overses af én eller anden årsag ...(?)
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:39 #50
hvad med php version 4.1.2?
Avatar billede olebole Juniormester
04. november 2004 - 13:41 #51
Det med indrykningerne minder mig pludselig om en længere fight, jeg havde med Admin for år tilbage, da jeg selv var ren Macintosse. Eksperten kunne ikke håndtere indrykninger fra en Mac ... så den er god nok. Der er noget specielt med MacOS' indrykninger  ;o)
Avatar billede olebole Juniormester
04. november 2004 - 13:42 #52
Det er 4.1.2, vi taler om  ;o)
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:42 #53
tænkte det nok :) og du var da ikke en tosse - det er du nu ;-P
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:43 #54
ok, så jeg må simpelthen droppe dette projekt kan jeg regne ud..
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:45 #55
til min kommentar 13:42:44 -> hvis du altså er ved en PC nu :D
Avatar billede detox Nybegynder
04. november 2004 - 13:46 #56
Der er åbenbart tale om noget 'mac-værk' :O) Du kunne forsøge dig med følgende:

$fil = 'http://xxx/din_fil.php';
$fp = fopen($fil, "r");
$data = fread($fp, 2048);
fclose($fp);
$lines = explode("\r", $data);
echo substr($lines[1], 0, 3);
Avatar billede olebole Juniormester
04. november 2004 - 13:49 #57
rasmus_a >> Nej, jeg er ikke en forhenværende tosse ... jeg er bifil ... ehhh ... til begge dele ... ehhhhm .... ja, jeg er altså til både PC og Mac  ;D
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:49 #58
naa, det er PHP versionen den er galt med. :o) dit giver samme resultat som olebole's.. ellers tak detox.
Avatar billede rasmus_a Nybegynder
04. november 2004 - 13:50 #59
Den er jeg med på - jeg har også én af hver! :D
Avatar billede sukos Juniormester
06. november 2004 - 13:09 #60
Forstår ikke lige det hele, (undtagen det med "til begge dele"), men

<?php
$find = file("file.txt");
echo substr(trim($find[1]), 0, 3);
?>

gør vel jobbet? Hvis ellers der findes en linie 2 i filen, og den ikke er tom
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:39 #61
det er noget med en bug i den php version der ligger på serveren. det underlige er bare at jeg har prøvet at køre scriptet på en anden server med phpversion 4.3.8 - og det virker stadigvæk ikke. filen der skal læses ligger naturligvis stadigvæk på den samme server med phpversion 4.1.2 men det burde jo være ligemeget... mystisk!
sukos> jeg har også prøvet med dit script.
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:40 #62
det virker som sagt fint med første linie -men bare ingen linier efter den..!?
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:44 #63
hmm og dog.. første linie set, som sagt, ud som følger:
<?php die("No access allowed."); ?>

Men bruger jeg følgende script:
$fil = 'http://www.google.dk';
$aFil = file($fil);
for ($i=0; $i<count($aFil); $i++) {
    if ( trim($aFil[$i])<>"" ) break;
}
$line = trim($aFil[$i]);

print substr($line, 0, 5);

(altså første linie) så udskriver den følgende:
"No ac" og ikke "<?php"

Kan det hjælpe? Hvorfor springer den over PHP koden som en browser ville gøre det? Den skal jo bare læse indholdet - ikke "køre" det. Det forklarer måske hvorfor den "die'er" efter første linie?
Avatar billede sukos Juniormester
06. november 2004 - 13:45 #64
Måske du skal definere den fulde sti til den fil du vil ha' læst?

<?php
$find = file($_SERVER["DOCUMENT_ROOT"] ."/file.txt");
echo substr(trim($find[1]), 0, 3);
?>
Avatar billede sukos Juniormester
06. november 2004 - 13:46 #65
altså, ikke bruge en url, men stien til filen.
Og hvis du har mulighed for at bruge ini_set, kan du jo prøve med

<?php
ini_set('error_reporting', "E_ALL");

$find = file($_SERVER["DOCUMENT_ROOT"] ."/file.txt");
echo substr(trim($find[1]), 0, 3);
?>
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:47 #66
altså:

<?php
ini_set('error_reporting', "E_ALL");

$find = file($_SERVER["DOCUMENT_ROOT"] ."/bibliotek/bibliotek/file.txt");
echo substr(trim($find[1]), 0, 3);
?>

?
Avatar billede sukos Juniormester
06. november 2004 - 13:51 #67
Ja, prøv bare! :O)
Og en anden ting,
et er hvad du får vist i browseren, noget andet hvad der står i kildekoden, (vis kilde), altså, prøv at brug vis kilde, for at tjekke hvad som php egentlig udskriver
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:51 #68
ovenstående viser blank side.
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:53 #69
det gør jeg også sukos, den er desværre også blank :(
Avatar billede rasmus_a Nybegynder
06. november 2004 - 13:56 #70
Så virker det sgu!! :D jeg brugte den her:
<?php
$find = file($_SERVER["DOCUMENT_ROOT"] ."/file.txt");
echo substr(trim($find[1]), 0, 3);
?>
TAK!
smid et svar :D
Avatar billede sukos Juniormester
06. november 2004 - 13:59 #71
Ja, ok, skulle lige til at lave noget mere med tjek på eom filen findes o.s.v., men det dropper jeg så! :O)

Mange servere tillader ikke relative stier når man vil læse en fil.
Avatar billede rasmus_a Nybegynder
06. november 2004 - 14:00 #72
ja men det var jeg også klar over - bare mærkeligt den ville godtage den første linie så.. måske er det noget af den bug olebole omtalede.. det kan han lige selv kommentere hvis han ser dette :) tak for hjælpen alle sammen. god weekend!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester