Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  25 971
Hei!
Bruker dette scriptet til å hente ut en txt-fil

Kode

<?php
$dager = floor(time() / 86400); // 60 * 60 * 24 = 86400
$filnr = ($dager % 42) + 1; //0 = igår, 1 = idag, 2 = imorgen

if($filnr <= 9 && $filnr >= 1)
$filnr = "0{$filnr}";

$filecontent = readFromFile($filnr);

echo nl2br("$filecontent");

function readFromFile($number){ 

        if($number < 43)
        {
                $textfile = "../jobb/{$number}.txt";
                $file = fopen("$textfile", 'r');
                $Data = fread($file, filesize($textfile));
                fclose($file);
                 return $Data; 
        }
}
?>
og det funker fjell.
Men jeg får ikke ett til av samme script til å fungere på samme nettside. Da blir det bare blankt.
Noen som vet hvorfor?
Hva med å vise oss det andre scriptet også?
Det er jo omtrent helt likt.
Eneste jeg har forandret er fra

Kode

$filnr = ($dager % 42) + 1; //0 = igår, 1 = idag, 2 = imorgen
til

Kode

$filnr = ($dager % 42) + 2; //0 = igår, 1 = idag, 2 = imorgen
vet ikke om det er en type eller ikke. men om jeg forstod det riktig er det kanskje verd å nevne at det ikke er 42 uker i et år, men 52.
Sitat av etse Vis innlegg
vet ikke om det er en type eller ikke. men om jeg forstod det riktig er det kanskje verd å nevne at det ikke er 42 uker i et år, men 52.
Vis hele sitatet...
Det er 52 UKER i et år. Ca.
356 dager.
42 er antall forskjellige filer jeg har. Når 42 er nådd, begynner den på 01 igjen dagen etter.
Så det har ingenting med verken uker eller år å gjøre :-)
Nawesome
Provo's Avatar
nFF Crew
Sikker på at filen du forsøker å åpne finnes og har et innhold? Ser ut som det er filen 16.txt som blir forsøkt lest.

Hvis den filen eksisterer og har innhold, og det slutter å fungere når du skifter ut det du viste, så ville jeg nok finkjemmet koden etter småfeil som kan ha lurt seg inn, som et manglende semikolon e.l.

Har du kun ett av scriptene per side, forresten? Og er det all PHP-koden på siden?
Ved + 1 hentes 15.txt, og ved + 2 hentes 16.txt
Begge filene har innhold.
Ved bruk av kùn ett script (+ 1)fungerer det, og 15.txt leses.
Setter jeg inn ett script til (+ 2) fungerer ingen av dem, og siden blir blank.
$textfile = "../jobb/{$number}.txt";

Ligger scriptene i samme mappe slik at begge peker til samme plass i oven forstående linje?

Men om filen ikke finnes, skal det da nok genereres en php feil
Scriptene ligger i samme php-fil. Slik:

Kode

<?php
$dager = floor(time() / 86400); // 60 * 60 * 24 = 86400
$filnr = ($dager % 42) + 1; //0 = igår, 1 = idag, 2 = imorgen

if($filnr <= 9 && $filnr >= 1)
$filnr = "0{$filnr}";

$filecontent = readFromFile($filnr);

echo nl2br("$filecontent");

function readFromFile($number){ 

        if($number < 43)
        {
                $textfile = "dager/{$number}.php";
                $file = fopen("$textfile", 'r');
                $Data = fread($file, filesize($textfile));
                fclose($file);
                 return $Data; 
        }
}
?>
<?php
$dager = floor(time() / 86400); // 60 * 60 * 24 = 86400
$filnr = ($dager % 42) + 2; //0 = igår, 1 = idag, 2 = imorgen

if($filnr <= 9 && $filnr >= 1)
$filnr = "0{$filnr}";

$filecontent = readFromFile($filnr);

echo nl2br("$filecontent");

function readFromFile($number){ 

        if($number < 43)
        {
                $textfile = "dager/{$number}.php";
                $file = fopen("$textfile", 'r');
                $Data = fread($file, filesize($textfile));
                fclose($file);
                 return $Data; 
        }
}
?>
Du lager 2 funksjoner med samme navn i samme script?
Jepp.
Har testet å endre filnr til filnr_a, men uten hell
Nawesome
Provo's Avatar
nFF Crew
Funker dette? Det finnes mer elegante måter å gjøre det på, men jeg ville ikke forandre for mye på koden din.

Kode

<?php
$dager = floor(time() / 86400); // 60 * 60 * 24 = 86400
$filnr = ($dager % 42) + 1; //0 = igår, 1 = idag, 2 = imorgen

$filecontent = readFromFile($filnr);
echo nl2br("$filecontent");

$filecontent = readFromFile($filnr+1);
echo nl2br("$filecontent");

function readFromFile($number){ 

        if($number < 43)
        {
                $number = strpad($number, 2, "0", STR_PAD_LEFT);
                $textfile = "../jobb/{$number}.txt";
                $file = fopen("$textfile", 'r');
                $Data = fread($file, filesize($textfile));
                fclose($file);
                 return $Data; 
        }
}
?>
Collecting your data
|d13m0b's Avatar
Crew
Bruk error_reporting( E_ALL ); under utvikling av php, da vil den rapportere med alle warning, notices og error. Det er mer "nazi", men det blir i det minste mer korrekt. Å gjøre noe annet er bare idiotisk, da sitter man der uten informasjon om hva som har hendt dersom det er noe galt. Med de klassiske innstillingene vil du ikke få noen spesiell warning dersom du prøver å aksessere en variabel som ikke eksisterer. Eksempelvis $Data og $data.

I tillegg, kan funksjonen strtotime være grei å bruke, så slipper du tenke på skuddår og slikt.

Kode

$time = strtotime( "+ 1 year" );
I funksjonen din ville jeg deklarert og initialisert variabelen data til -1 og returnert på slutten av koden. På den måten kan du dra en sjekk mot -1 og i det minste avklare om det skjer noe fornuftig/ikke fornuftig i funksjonen. Slik du har den funksjonen nå vil den kunne enten returnere verdi, eller ikke noe som helst. Dette vil kunne klassifiseres som litt dårlig programmeringsskikk.

Kode

function readFromFile($number)
{
        $Data = -1; 

        if($number < 43)
        {
                $number = strpad($number, 2, "0", STR_PAD_LEFT);
                $textfile = "../jobb/{$number}.txt";
                $file = fopen("$textfile", 'r');
                $Data = fread($file, filesize($textfile));
                fclose($file);
        }

        return $Data;
}
Jeg kan også tipse om å bruke Zend Studio, og lære deg å bruke debuggeren. Zend støtter også web debugging hvis du ikke vil gjøre debuggingen lokalt. Da har du mulighet til å kunne gå steg for steg igjennom koden din (runtime) og se (med f.eks watches) på verdiene på variablene dine. Dette gir det ufattelig mye bedre debuggingsmuligheter og det kan kalles et paradigmeskifte.
Heter det ikke str_pad?

Nevermind, det ene funket jo så.
Nawesome
Provo's Avatar
nFF Crew
Sitat av HabbaLaBiba Vis innlegg
Heter det ikke str_pad?
Vis hele sitatet...
Jo, det gjør det. Skrivefeil fra min side, bare.
readFromFile() blir definert to ganger når du inkluderer fila dobbelt opp.

Når du utvikler i PHP må se feilmeldingene. Da må enten:

1. Installere en lokal webserver på maskinen og utvikle med. Så konfigurerer du denne til å vise feilmeldingene i nettleseren.

eller:

2. Finne ut hvor på serveren din du kan lese feilloggen.

Alt annet er håpløst, fordi du ender med må måtte gjette i hytt og pine når ting går galt. Feilmeldinger er din venn.

http://www.php.net/manual/en/errorfu...display-errors
Legg funksjonen i en separert php fil. eks: funksjoner.php

og bruk:
require_once("funksjoner.php")
Vis hele sitatet...
på toppen av php scripte ditt.
@Provo: Nope, det funket ikke
@LetMeBleedPLZ: Fikk ikke det til å fungere heller

Jeg måtte endre på orgscriptet.

Kode

<?php
$dager = floor(time() / 86400); // 60 * 60 * 24 = 86400
$filnr = ($dager % 42) + 1; //0 = igår, 1 = idag, 2 = imorgen

if($filnr <= 9 && $filnr >= 1)
$filnr = "0{$filnr}";

$filecontent = readFromFile($filnr);

echo ("$filecontent");

function readFromFile($number){ 

        if($number < 43)
        {
                $textfile = "jobb/{$number}.php";
                include $textfile;
	     //$file = fopen("$textfile", 'r');
                //$Data = $textfile;
                //fclose($file);
                 //return $Data; 
				 
        }
}
?>
Måtte bruke include istedenfor return data for å få det til å funke som jeg ville. Men jeg klarer ikke å få 2 stk på samme side til å funke....
Nawesome
Provo's Avatar
nFF Crew
Sitat av Hansemannen Vis innlegg
@Provo: Nope, det funket ikke
Vis hele sitatet...
Og du husket da selvsagt på å forandre "strpad" til "str_pad", samt at du ikke skulle ha det scriptet to steder på siden? Scriptet ble modifisert slik at du kun skulle stå én gang, og at det da gjorde det du forsøkte å gjøre ved å sette det inn to ganger.
@Provo: Beklager, det funket :-) Jeg som ikke følger helt med....
Men...jeg prøver nå også å benytte flere filbaner.
Dette skriptet skal hente inn en oversikt over hvordan jeg jobber, og det er flere avdelinger å følge med på. Så
$textfile = "../jobb/{$number}.php"; skal benyttes flere ganger på samme side, men med forskjellige baner. Feks

Kode

$textfile = "../jobb2/{$number}.php";
$textfile = "../jobb3/{$number}.php";
Nawesome
Provo's Avatar
nFF Crew
Du kan jo modifisere funksjonen din til å ta to parametre, altså for eksempel endre

Kode

function readFromFile($number)
til

Kode

function readFromFile($filnr, $jobbnr)
Og deretter skifte

Kode

$textfile = "../jobb/{$number}.txt";
til

Kode

$textfile = "../jobb{$jobbnr}/{$filnr}.txt";
Da må du selvsagt modifisere funksjonskallet også, fra

Kode

$filecontent = readFromFile($filnr);
echo nl2br("$filecontent");
til

Kode

$filecontent = readFromFile($filnr,1);
echo nl2br("$filecontent");
for å referere til jobb1, og 2 for jobb2 osv.
Bare som et eksempel.
Hmm. Tror du nærmer deg.
Men for å bruke $jobbnr, så må jeg vel ha en funksjon som definerer underkatalogene som filene skal hentes ifra?
Velger å kalle $jobbnr for $avdeling.
$avdeling = (navnet på alle undermappene);

Da kan jeg bruke noe àla

Kode

$textfile = "{$avdeling}/{$filnr}.php";
for å hente filene som hører til idag.
Nawesome
Provo's Avatar
nFF Crew
Jeg var av den oppfatning, ut fra eksempelet ditt, at mappene var organisert som "../jobb1/", "../jobb2/", "../jobb3/" osv.. I så fall kan du gjøre det slik jeg skrev det, hvor kun det siste nummeret settes inn, mens resten av mappenavnet er definert. Er de derimot forskjellig navngitt, så kan du gjøre det slik du selv sier. Klart, det du foreslår vil fungere uansett, så du kan fint bruke den løsningen.

EDIT: Med forbehold at du legger inn nødvendige annen tekst, slik som "../{$avdeling}", for eksempel, hvis du ikke definerer alt det i $avdeling-variabelen når du kaller funksjonen.
Ja, skjønte det. Dårlig formulert av meg.
Jeg gikk nå for dette:

Kode

<?php
$dager = floor(time() / 86400); // 60 * 60 * 24 = 86400
$filnr = ($dager % 42) + 1; //0 = igår, 1 = idag, 2 = imorgen

echo "I dag<br>";
$filecontent = readFromFile($filnr);
echo nl2br("$filecontent");

echo "<br>";
echo "I morgen<br>";
$filecontent = readFromFile($filnr+1);
echo nl2br("$filecontent");

echo "<br>";
echo "2 dager<br>";
$filecontent = readFromFile($filnr+2);
echo nl2br("$filecontent");


function readFromFile($number){ 

        if($number < 43)
        {
                $number = str_pad($number, 2, "0", STR_PAD_LEFT);
                $textfile1 = "dager/navnpåavdeling1/{$number}.php";
	     $textfile2 = "dager/navnpåavdeling2/{$number}.php";
                include $textfile1;
	     include $textfile2;
				
        }
}
?>
og det ser også ut til å fungere.
Tusen tusen takk for hjelpen så langt.
Nawesome
Provo's Avatar
nFF Crew
Det er noen ting i koden som ikke helt gir mening nå.. Det ene er $filecontent = readFromFile($filnr);, ettersom denne funksjonen ikke returnerer noe. Etterfølgende echo nl2br("$filecontent") gjør heller ingenting, ettersom $filecontent er tom. Hvis du absolutt vil bruke "include" fremfor å returnere, så kan du gjøre om de to nevnte kodelinjene (og de liknende) til kun "readFromFile($filnr);".

Har du mange slike etterfølgende readFromFile($filnr+n), så kan du ta en titt på for-løkker, så du slipper å ramse opp alle sammen i koden.
Moderer