Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[PHP] header(), mijn bestand-Grootte berekn. niet accuraat

Pagina: 1
Acties:
  • 509 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo :) ik bereken de grootte van een bestand, ik gebruik hiervoor de strlen() functie. Dit werkt op zich wel, echter heb ik het idee dat de laadbalk van de browser eventjes blijft hangen op het laatst. Soms laden dan niet alle afbeeldingen.

Ik vraag me af of ik nog iets verder moet uitrekenen, maar mischien heeft het iets te maken met 1024, dat ik de 24 ergens moet optellen? Ik bedoel zijn hier andere manieren voor te bedenken? 8)7

De php-tag
Syntax:
PHP: voorbeeld.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    # Open de web-pagina...
    ob_start();
    require_once("web-pagina.php");
    $pagina=ob_get_contents();
    ob_end_clean();
    
    # Herplaats wat strings met wat html...
    $pagina = str_replace("A","Anton",$pagina);
    $pagina = str_replace("B","Bernard",$pagina);
    $pagina = str_replace("C","Cornelis",$pagina);
    
    header("HTTP/1.1 200 OK");
    header("Status: 200");
    header("Cache-Control: Public");
    header("Pragma: Public");
    header("Content-Disposition: inline; filename=web-pagina.html");
    
    # Hier de berekening van de grootte van het bestand...
    header("Accept-Ranges: bytes");
    header("Content-Length: ".strlen($pagina));
    echo $pagina;


HTML:web-pagina.php:
code:
1
2
3
4
5
6
7
8
9
10
<html>
<head>
<title>web-pagina.php</title>
</head>
<body>
<?php echo "Dit is de a van A"; ?><br>
<?php echo "Dit is de a van B"; ?><br>
<?php echo "Dit is de a van C"; ?><br>
</body>
</html>

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:20

voodooless

Sound is no voodoo!

Vraag nummer 1 is waarom je de content lengte mee zou willen geven?

Verder zou strlen wel eens niet goed kunnen werken als je text encoding UTF8 of Unicode is, en je vreemde karakters gebruikt.

Do diamonds shine on the dark side of the moon :?


Verwijderd

Topicstarter
De content-length wil ik meegeven omdat het normaal is dat een pagina een bepaalde grootte heeft.

Okay, dus vreemde karakters etc zou omzetten naar html-code vreemdetekens, daar ben ik namelijk ook mee bezig geweest vanwegen een weergave probleem, met bijvoorbeeld het woord "één" ('e'en) dat krijg ik in mijn browser als �� op dit moment, terwijl ik dit liever zou coderen als &#nummer; of &#naam; Ik dacht het al eens voor elkaar te hebben gehad maar kan het niet meer vinden.

Met al deze drie headers geprobeerd

Content-type: text/html; charset=iso-8859-1
Content-Type: text/html; charset=Windows-1252
Content-Type: text/html; charset=UTF-8


Iemand een suggestie?

[ Voor 24% gewijzigd door Verwijderd op 11-01-2008 21:58 ]


  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Moet je niet nog een 'Connection: close' meegeven?

On track


Verwijderd

Voor speciale tekens moet je dacht ik html_entities of html_special_chars gebruiken, kijk anders even op www.php.net ;)

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 11:20

voodooless

Sound is no voodoo!

Verwijderd schreef op vrijdag 11 januari 2008 @ 21:53:
De content-length wil ik meegeven omdat het normaal is dat een pagina een bepaalde grootte heeft.
Zo normaal is dat tegenwoordig niet meer. Het is vooral handig bij dingen die een bestand terug geven om te downloaden zodat de browser weet hoe ver hij is, voor eenvoudige scripts maakt het eigenlijk niet veel uit, op misschien enkele speciale toepassingen na.

Check anders even met firebug (of andere debugger voor je browser), welke header je precies stuurt. Misschien maakt PHP er wel weer heel wat anders van.

ALs je vreemde tekens hebt, moet je eerst maar eens uitzoeken in welke tekst encoding die precies opgeslagen zijn. Vervolgens converteer je die naar de door jou passende encoding. Op die manier hoe je ook niet alles te escapen.

Do diamonds shine on the dark side of the moon :?


  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
voodooless heeft wat mij betreft gelijk hier. Voor alles wat je browser moet renderen hoef je geen lengte mee te geven, aangezien het hooguit een paar kB groot zal zijn. Voor downloads is het echter wel interessant, dan zit je inderdaad met de feature dat de browser weet hoeveel bytes bij nog moet. Dus, ik zou deze manier van handelen achterwege laten voor je standaard html gebeuren.

0x7F


  • rogierslag
  • Registratie: Maart 2005
  • Laatst online: 14-10-2024
En meteen even over al je andere headers, waarom laat je Apache of een andere webserver dat niet gewoon afhandelen, vette kans dat nu een hele zooi headers dubbel worden verstuurd.

Mijn ervaring is dat je, bahalve additionele headers, gewoon alles door die webserver moet laten regelen. Dus geen PHP E-tags of status headers.

Voorbeeld: Je stuurt expliciet de "HTTP/1.1 200 OK" header, stel dat Googlebot langskomt en slechts HTTP1.0 ondersteunt. Die breekt zijn request gewoon af omdat die niks kan lezen. Lijkt mij ten eerste onverstandig, ten tweede doe je een hele hoop werk terwijl dat gewoon niet nodig is.

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 21:07
rogierslag schreef op zaterdag 12 januari 2008 @ 12:37:
Mijn ervaring is dat je, bahalve additionele headers, gewoon alles door die webserver moet laten regelen. Dus geen PHP E-tags of status headers.
Hier sluit ik mij ook bij aan: PHP kan zelf al prima de juiste headers meegeven, mits je dit goed instelt. Quote uit m'n php.ini:
; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header. To disable sending of the charset, simply
; set it to be empty.
;
default_charset = "utf-8"
Waarschijnlijk wordt deze waarde, als hij ingesteld is, altijd verstuurt, waardoor het handmatig versturen ervan alleen maar ambigu gedrag oplevert in verschillende browsers (aangezien voor zover ik weet de HTTP specificatie vereist dat headers niet dubbel verstuurt worden en ik gok dat nieuwe waardes gewoon genegeerd worden).

Daarnaast wil je juist helemaal geen bestandslengte opgeven voor pagina's; als je dit niet doet kan je webbrowser namelijk al veel eerder beginnen met parsen wat je site alleen maar sneller maakt (en bepaalde hippe web2.0 features als COMET vereisen zelfs dat je de connectie gewoon open laat). Hoe dan ook zal die content-length header niets uitmaken voor het al dan niet laden van plaatjes aangezien die elk een aparte request hebben met elk hun eigen content-length header :)

[ Voor 13% gewijzigd door FragFrog op 12-01-2008 14:08 ]

[ Site ] [ twitch ] [ jijbuis ]


Verwijderd

houd je er ook rekening mee dat de communicatie waarschijnlijk tegenwoordig gewoon door gzip verpakt wordt verstuurd, en dat er dus waarschijnlijk 'n andere content-length in de header wordt gezet door gzip oid?

en die: Status 200 header is natuurlijk vrij nutteloos, je zit (toch) niet in CGI

Althans dat staat allebij in dat Headers correct versturen vanuit php draadje

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 01 juli 2010 @ 17:46:
houd je er ook rekening mee dat de communicatie waarschijnlijk tegenwoordig...
Houd je er ook rekening mee dat je in een topic van 2½ jaar oud reageert? :X

[ Voor 4% gewijzigd door RobIII op 01-07-2010 17:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.