[PHP] script werkt wel op ene server, niet op andere

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een script verschreven wat de resultaten van een query uitvoert als Excel bestand.
Dit script werkt al een tijd na behoren op een server (win2k,IIS). Nu moet ik noodgedwongen over naar een ander server welke op FreeBSD/Apache/Plesk draait.

Dit is het script
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function toExcel($sql,$beschrijving){
    
    define("NL", "\r\n");
    // start with mysql_connect and all the obvius stuff

    $content = '<table cellpadding="3" cellspacing="0" border="1" frame="hsides" rules="groups" summary="Export Web-IVS."><caption>'.$beschrijving.'</caption>';

    $rs = mysql_query($sql);
    $fields = mysql_num_fields($rs);

    $content .= '<thead><tr>';
    for ($i = 0; $i < $fields; $i++) {
        $content .= '<th>'.mysql_field_name($rs, $i).'</th>';
    }
    $content .= '</tr></thead>';

    $content .= '<tbody>';
    for ($i = 0 ; $row = mysql_fetch_row($rs) ; $i++) {
        // Splits the table into five-row blocks, which
        // can be used together with CSS to make the table look realy nice.
        if (is_int($i / 5) AND $i != 0) {
            $content .= '</tbody>'.NL;
            $content .= '<tbody>'.NL;
        }
        $content .= '<tr>';
        foreach($row as $value) {
            if ((!isset($value)) OR ($value == "")) {
                $value = "&nbsp;";
            }
            $content .= '<td>'.$value.'</td>';
        }
        $content .= '</tr>';
    }
    $content.="<caption>dit overzicht is op ".date("d-m-Y",time())." gegenereerd door ".$_SESSION['gebruiker']."</caption>";
    $content .= '</tbody>';
    $content .= '</table>';
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=export.xls");
    header("Content-Location: export.xls");
    header("Accept-Ranges: bytes");
    header("Content-Length: " . strlen($content));
    header("Expires: 0");
    header("Cache-Control: private");
    echo $content;
}


Het script gaat goed tot het moment dat de headers verzonden worden (op regel 37).
In plaats van dat het bestand "export.xls" heet, zoals op de bestaande server, krijgt het bestand de naam van het uitvoerende script (b.v. /rapportage/export_werknemers.php?werkgeverID=45
Oja, nog iets wat mogelijk van belang is. De bestaande server draait zonder SSL, de nieuwe (waar het fout gaat) met.

Iemand een idee?

Alvast bedankt,

Marc

Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

Je zou de volgorde van de headers eens om kunnen draaien.

ik heb hier toevallig een soortgelijk script voor een archief en daar staan de volgende headers in:
PHP:
1
2
3
4
5
6
7
header("Cache-Control: ");
    header("Pragma: ");
    header("Content-type: ".mime_content_type($fileString));
    header("Content-Disposition: attachment; filename=\"".$fileName."\"");
    header("Content-length:".(string)(filesize($fileString)));
    sleep(1);
    fpassthru($fdl)


misschien heeft het er iets mee te maken?

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

En wat heb je nu zelf al geprobeerd? Wat lukte daar niet mee? Je zult aan het debuggen moeten gaan om te onderzoeken wat er nu anders is. Zie ook P&W FAQ - De "quickstart" en dan met name P&W FAQ - Leer **** debuggen!!.

Heb je de headers al gecheckt die de client nu echt binnenkrijgt? Wat is het verschil met de headers die je zelf meestuurt?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Wits
  • Registratie: Juli 1999
  • Laatst online: 16-01-2023

Wits

fka Witsflow

Zoals ook te zien is in het script van SantjeS zal het toevoegen van header("Pragma: "); aan je header het probleem fixen. Standaard (?) staat deze namelijk op "no-cache" ingesteld, en dat vindt IE niet zo leuk icm HTTPS. Heb hier ook eens m'n hoofd over gebroken toen een klant met hetzelfde probleem kwam.

Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Moet je Content-Type application/vnd.ms-excel niet op een of andere manier verbinden aan de extentie .xls?

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

extensie staat "gelukkig of helaas" los van mimetypes dus dat is niet nodig. extensies worden eigenlijk alleen maar gebruikt voor win32/64 systemen. op *nix systemen wordt, wanneer de software een beetje degelijk is geschreven, niet gekeken naar een extensie. Daar is het mimetype voor. Een win32/64 bak zal niet veel doen met dit mimetype. Wanneer je het op een *nix systeem doet heeft het wel degelijk nut . Anders zal je bestand altijd opgepakt worden als zijnde een octet_stream of een plain text bestand...

de reden dat ik gelukkig of helaas tussen "" heb staan is omdat ik van mening ben dat extensies het alleen maar makkelijker moeten maken voor het oog. Niet voor software... aangezien een programma er niet bijvoorbaat vanuit mag gaan dat het bestand ook daadwerkelijk van het type is dat de extensie aangeeft.

Bijvoorbeeld van die neppe spam/virus attachments met als bestandsnaam "Fotovanmij.JPG.bat" de laatste extensie wordt door standaard win32/64 instellingen dan niet weergegeven (als ik me niet vergis alleen nog maar op een filesystem maar niet meer in de mail clients) Indien hier gebruik gemaakt zou worden van mimetypes zou je duidelijk zien dat het bestand _GEEN_ foto is!

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
@SantjeS:

Als je in je apache config op een *nix systeem niet aangeeft dat een .php bestand als PHP bestand behandeld moet worden geeft ie het ook gewoon weer als plain text ...

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

Verwijderd

AlainS schreef op zaterdag 31 december 2005 @ 02:00:
@SantjeS:

Als je in je apache config op een *nix systeem niet aangeeft dat een .php bestand als PHP bestand behandeld moet worden geeft ie het ook gewoon weer als plain text ...
Dat heeft te maken met apache en niet zozeer met het besturingssysteem.

[ Voor 6% gewijzigd door Verwijderd op 31-12-2005 13:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tweakers, allemaal bedankt voor jullie bijdrage. Het probleem is inderdaad gefixt met de toevoeging van header("Pragma: ");
Nogmaal bedankt!

Groet,

Marc
Pagina: 1