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.
  11 1306
Hei freaks

Jeg har en stund skrevet PHP og MySQL, og lært mye. Aldri gått noe skole e.l
Jeg er vandt med å jobbe lokalt med wampserver. Det virker som om den ikke er så streng som webhotellet jeg leier. Ikke spytter den ut like mye feilmeldinger heller (selvfølgelig).
Dette viser seg å ha blitt et problem ovenfor mine "programmerings"-vaner, da jeg får masse feil i scriptene mine som jeg vanligvis ikke får.

et eksempel er å starte session i et separat script som inkluderes i alle andre sider:

session.php -> session_start();
index.php -> require_once('session.php');

gir denne meldingen på hver eneste side:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/blablabla/public_html/blabla/index.php:1) in /home/blablabla/public_html/blabla/session.php on line 2

Som sender meg over til et annet spørsmål..
Bruk av header("Location: index.php"); midt i et script feiler, fordi "headers er allerede sendt". Hvordan skal man redirecte på en riktig måte?

En "workaround" jeg har funnet er å bruke javascript, men jeg føler det er litt teit.

eks: printf("<script>location.href='nesteside.php'</script>");

Jeg opplever noen ganger ved bruk av den metoden at siden bare stopper når den er ferdig lastet.

Jeg opplever også at når jeg logger inn via login.php, så settes $_SESSION variablene, men jeg blir sendt tilbake til login. Jeg kan da enten logge inn en gang til, og alt funker som det skal, eller jeg kan bare gå til neste side som vanligvis ville sendt meg tilbake til login dersom session variablene ikke var satt. Jeg synes det er veldig rart..

Det er helt sikkert mange fler feil jeg kommer til å oppleve videre, men til å begynne med er dette de jeg har kommet over.

Er det noen måte å "klone" produksjons serveren's innstillinger, legge det over på mitt eget oppsett? Jeg vil da installere Apache, php og mysql hver for seg på en virtuell server (istedet for next, next, next, finnish installasjon av wamp)

Håper noen kan komme med noen hjelpende svar
Det kan være et par ting, men vi skulle gjerne sett litt (i allefall starten) av koden din, for å enklere å kunne finn ut hva som er galt.

Det kan f.eks. være så enkelt som at white spaces lager trøbbel.
Det kan også være forskjell i php versjon, hva som er tillatt og ikke i php-ini konfigen. Det er rett og slett mye det kan være.
Om du har identisk php.ini fil på begge serverene burte det være ganske likt. Sjekk at serverene kjører samme PHP versjon, som nevnt ovenfor.
Sikkerhetsklarert
Sjekk hva som er satt opp av error reporting.. Det kan være at den lokale installasjonen din ikke viser like mye feilmeldinger pga dette.
Headers kommer først når servern svarer på et request, før noe av innholdet. Derfor kan du ikke sende headere etter at du har sent innhold. Denne feilen kan komme uventet hvis du har whitespace i begynnelsen av fila di, og dermed ikke mener å sende noe.
Grunnen til at start_session gir en feilmelding, er at den gir clienten en ny cookie, noe som gjøres med headers. Den fungerer altså ikke om du alt har sent noe innhold.
Mange takk for svar alle sammen!

Sitat av bronsky Vis innlegg
Det kan være et par ting, men vi skulle gjerne sett litt (i allefall starten) av koden din, for å enklere å kunne finn ut hva som er galt.

Det kan f.eks. være så enkelt som at white spaces lager trøbbel.
Vis hele sitatet...
Akkurat dette VAR et problem.. men det fiksa jeg.
Noen filer var lagret som UTF8 med BOM. Det også skapte problemer med whitespace.

Sitat av Hacr Vis innlegg
Om du har identisk php.ini fil på begge serverene burte det være ganske likt. Sjekk at serverene kjører samme PHP versjon, som nevnt ovenfor.
Vis hele sitatet...
Vet du om det er noen måte å få tak i php.ini fra host1.no? Eller må jeg bare gå over alle settings i phpinfo og fikse det manuelt?


Sitat av khh Vis innlegg
Headers kommer først når servern svarer på et request, før noe av innholdet. Derfor kan du ikke sende headere etter at du har sent innhold. Denne feilen kan komme uventet hvis du har whitespace i begynnelsen av fila di, og dermed ikke mener å sende noe.
Grunnen til at start_session gir en feilmelding, er at den gir clienten en ny cookie, noe som gjøres med headers. Den fungerer altså ikke om du alt har sent noe innhold.
Vis hele sitatet...
Hvordan foreslår du at en redirect skal foregå på si.. linje 40?
Du kan komme deg rundt den feilmeldingen ved å benytte ob_start() øverst i fila, samt ob_end_flush() nederst. Jeg er usikker på de negative konsekvensene, men hvis du bare er ute etter en hacky metode som rydder feilmeldinger av veien er det verdt et forsøk. Plasser ob_start() øverst i index-fila, før du inkluderer sessions.php.
Sitat av KayBeeOui Vis innlegg
Vet du om det er noen måte å få tak i php.ini fra host1.no? Eller må jeg bare gå over alle settings i phpinfo og fikse det manuelt?
Vis hele sitatet...
Vet ikke hvordan host1 sine webhotell fungerer. Regner med at det er et webhotell da du ikke har tillgang til php.ini filen?
Du kan jo kontakte dem og høre hvordan du kan endre på den.
Sitat av Pløyd Vis innlegg
Du kan komme deg rundt den feilmeldingen ved å benytte ob_start() øverst i fila, samt ob_end_flush() nederst. Jeg er usikker på de negative konsekvensene, men hvis du bare er ute etter en hacky metode som rydder feilmeldinger av veien er det verdt et forsøk. Plasser ob_start() øverst i index-fila, før du inkluderer sessions.php.
Vis hele sitatet...
Takker Er i grunn ikke ute etter å finne en hacky metode å komme meg rundt. Ønsker å vite hvordan jeg kan få det til å bli "riktig".


Sitat av Hacr Vis innlegg
Vet ikke hvordan host1 sine webhotell fungerer. Regner med at det er et webhotell da du ikke har tillgang til php.ini filen?
Du kan jo kontakte dem og høre hvordan du kan endre på den.
Vis hele sitatet...
Er ikke ute etter å endre på serveroppsettet. Vil ha den så jeg kan jobbe med problemene mine lokalt, men med samme oppsett som host1.no
Sitat av KayBeeOui Vis innlegg
Hvordan foreslår du at en redirect skal foregå på si.. linje 40?
Vis hele sitatet...
Hvis siden trenger en redirect, burde du kunne finne ut av det før du sender noe data, så den peneste løsninga er å restrukturere koden, men det kan være en del jobb. Som Pløyd nevnte kan man komme seg rundt problemet med å bruke cache, men den metoden er ikke like pen - selv om den fungerer.
Overskuddsmateriell
Sitat av KayBeeOui Vis innlegg
Som sender meg over til et annet spørsmål..
Bruk av header("Location: index.php"); midt i et script feiler, fordi "headers er allerede sendt". Hvordan skal man redirecte på en riktig måte?

En "workaround" jeg har funnet er å bruke javascript, men jeg føler det er litt teit.

eks: printf("<script>location.href='nesteside.php'</script>");

Jeg opplever noen ganger ved bruk av den metoden at siden bare stopper når den er ferdig lastet.
Vis hele sitatet...
Du kan ikke sende header etter du har sendt "<html>", dette kan løses på flere måter.
  • Enten ved hjelp av js som du nevner som ikke vil funke om man eks kjører noscript
  • et system der du har en echo nederst som spyr ut alt, enten ved hjelp av et template system (eks Smarty) eller selvmekk.
  • selv bruker jeg denne: <meta http-equiv="refresh" content="0;url=index.php">