webForumDet fria alternativet

Header() ger ingen effekt

16 svar · 967 visningar · startad av M@rtin

M@rtinMedlem sedan dec. 19992 085 inlägg
#1

Jag har en ubuntu-server med apache2 och php installerat. Jag vill generera xml filer med php så jag har följande rad i .htaccess:

AddType application/x-httpd-php .xml

I xml (php) filerna har jag sedan lagt följande rad överst:

<? header('Content-type: application/xml; charset=windows-1252'); ?>

När jag gör en head på filen via http får jag dock:

Content-Type: text/html; charset=ISO-8859-1

Är det apache eller php som på något sätt skriver över den header-info jag själv satt? Hur löser man detta?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#2

Testa det här istället:

<? header('Content-type: text/xml; charset=windows-1252'); ?>

Alltså "text" istället "application".

colioneMedlem sedan juni 20014 421 inlägg
#3

AddType berättar för klienten vad det är för något han får. (Men det funkar serverside också, pga att den mappar extensionen till mime-typen)
AddHandler berättar för servern vilken handler den ska ha på en viss extension (Den mappar extensionen till en viss handler).

Så:

AddHandler application/x-httpd-php .xml

Är egentligen ett bättre sätt.

Om apache fortfarande skirver över din xml-typ kan du prova kasta in:

RemoveType .xml innan.

M@rtinMedlem sedan dec. 19992 085 inlägg
#4

Aha, då förstår jag, dock verkar något fortfarande skriva över xml-typen. Så här ser min .htaccess ut nu:

RemoveType .xml
AddHandler application/x-httpd-php .xml
M@rtinMedlem sedan dec. 19992 085 inlägg
#5

Nu gjorde jag ett nytt test med en annan, påhittad, filändelse och då fungerade det perfekt. Så någonstanns finns det någonting som säger att filer som slutar på .xml alltid ska levereras som "text/html; charset=ISO-8859-1", någon som har en idé på var jag ska leta?

SPiNMedlem sedan mars 20007 896 inlägg
#6

Försök med följande i .htaccess (ta bort dina AddType och AddHandler direktiv, liksom RemoveType direktivet):

<Files *xml>
ForceType application/x-httpd-php
</Files>

Eller om du har dina "XML"-filer i en egen katalog, behöver du enbart ha med ForceType-direktivet.

Edit, du har väl förresten installerat PHP som en Apache-modul? application/x-httpd-php fungerar enbart när PHP är installerad som modul till Apache...

M@rtinMedlem sedan dec. 19992 085 inlägg
#7

Det gjorde dessvärre ingen skillnad.

Jag minns inte hur jag installerade php men den skriver ju ut saker från databasen korrekt så den tolkar absolut php på rätt sätt. Och jag han sätta andra headers med header-funktionen, det är bara content-type som strular.

SPiNMedlem sedan mars 20007 896 inlägg
#8

Ja, PHP är antagligen installerat på rätt sätt. Däremot verkar det inte som att du har mod_rewrite påslaget i Apache och då kan du inte använda .htaccess som du vill.

Är det din server? I så fall:
1. Ändra i apache2.conf, lägg till en sektion:

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

2. Leta upp filen apache2/sites-available/default och ändra AllowOverride till All (är antagligen satt till None nu) för den host du ska använda det här på.
3. Starta om apache

Sen ska .htaccess kunna göra det du vill att den ska göra (har precis provat själv, och mitt förra inlägg gör det du vill att den ska göra).

M@rtinMedlem sedan dec. 19992 085 inlägg
#9

mod_rewrite funkar bra, annars skulle väl inte .xml tolkas av php? Har även massor av RewriteRules på samma domän som fungerar fint. Hade dock inte IfModule-raden i apache2.conf, la till den och startade om apache men det gav inte heller någon skillnad.

Jag misstänker att det är någon slags default-inställning för .xml-filer, jag tittade i /etc/mime.types och där har jag följande rad:

application/xml                                 xml xsl

Men det är ju inte den mimetypen jag får så det är inte därifrån det kommer.

colioneMedlem sedan juni 20014 421 inlägg
#10

Inget av det du använder kommer från mod_rewrite. AddHandler/AddType är från mod_mime, ForceType är i mod_core, likaså AllowOverride och Files.

Hur ser din <?xml ...>-tagg ut? Har du någon url som vi kan besöka xmlen på?

M@rtinMedlem sedan dec. 19992 085 inlägg
#11

Kommer inte RewriteRule från mod_rewrite?

Men då kanske det är det som är problemet ändå.

Testa denna url:
http://pusha.qvaq.com/medlemmar/Robert/vanner/aktivitet/rss/index.xml

SPiNMedlem sedan mars 20007 896 inlägg
#12

colione har ju rätt. Jag trodde dom hade flyttat ForceType till mod_rewrite, men det var tydligen till mod_core... (den låg i mod_mime tidigare). Däremot har AllowOverride allting med det här att göra...

Nu har jag testat runt lite, och jag gissar på att du inte tillåter överskuggningar i dina htaccess-filer.

För att få PHP att parsa XML-filer, förhoppningsvis "the ultimate guide";
1. Editera dina default-inställningar (för mig /etc/apache2/sites-available/default) till att tillåta överskuggning på din värd:

...
AllowOverride all
...

Du kan självklart specificera vilka direktiv som ska vara överskuggningsbara - om du inte vill tumma på säkerheten.

2. Din .htaccess:

<FilesMatch "\.(xml)$">
    ForceType application/x-httpd-php
</FilesMatch>

alternativt det jag visade i ett tidigare inlägg. Klart.

I och med att det inte hade med module rewrite att göra, kan du ta bort IfModule-sektionen som du lade till i apache-konfigurationen.

M@rtinMedlem sedan dec. 19992 085 inlägg
#13

Jag får verkligen inte till det. Har ändrat AllowOverride till All på alla tänkbara ställen nu men det gör ingen skillnad :/

SPiNMedlem sedan mars 20007 896 inlägg
#14

Skulle du kunna visa hur din default-fil ser ut? Du startade väl om apache efter att du ändrade i default-inställningarna? Det fungerar nämligen hur bra som helst för mig...

M@rtinMedlem sedan dec. 19992 085 inlägg
#15

Ja jag har ingen som heter default men dessa är de två filer som borde vara de enda inblandade.

Listen 443

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile      /etc/apache2/cacert.pem
        SSLCertificateKeyFile   /etc/apache2/privkey.pem

        ServerAdmin webmaster@localhost

        DocumentRoot /home/web/
        DirectoryIndex index.html index.htm index.cgi index.pl index.php index.xhtml
        <Directory />
                Options FollowSymLinks
                AllowOverride all
        </Directory>
        <Directory /home/web/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride all
                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

        Alias /icons/ "/usr/share/apache2/icons/"
        <Directory "/usr/share/apache2/icons">
                Options Indexes MultiViews
                AllowOverride all
                Order allow,deny
                Allow from all
        </Directory>

</VirtualHost>

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /home/web/
        DirectoryIndex index.html index.htm index.cgi index.pl index.php index.xhtml
        <Directory />
                Options FollowSymLinks
                AllowOverride all
        </Directory>
        <Directory /home/web/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride all
                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

        Alias /icons/ "/usr/share/apache2/icons/"
        <Directory "/usr/share/apache2/icons">
                Options Indexes MultiViews
                AllowOverride all
                Order allow,deny
                Allow from all
        </Directory>

</VirtualHost>
<VirtualHost *:80>
   DocumentRoot "/var/www/pusha/"
   ServerName pusha.qvaq.com
   ServerAdmin [email]censurerat@gmail.com[/email]
   ErrorLog /var/log/apache2/pusha_www_err.log
   CustomLog /var/log/apache2/access_pusha_www.log combined
   <Directory /var/www/pusha/>
     Options FollowSymLinks MultiViews +Includes
     AllowOverride all
     Order allow,deny
     allow from all
   </Directory>
</VirtualHost>

Den första har inte jag skrivit utan den hörde till burken. Det är någon slags miniserver som hade ett webbgränssnitt inbyggt. Använder den bara för testning.

Jepp jag startade om apache.

M@rtinMedlem sedan dec. 19992 085 inlägg
#16

Jag har fortfarande inte fått någon rätsida på detta problem.

Nu har jag börjat fundera på om det är min kodeditor (Eclipse) som kan ställa till alla problem. Det blir nämligen fel på åäö när jag skriver det i en fil med filändelsen .xml men inte om jag skriver det i en fil med ändelsen .php. I xml-filen ändras t.ex. ä till ä

Kan det vara nåt sånt, och i så fall hur löser man det?

M@rtinMedlem sedan dec. 19992 085 inlägg
#17

Herregud va klantig jag är!

Dels hade eclipse betydelse, .xml filer blev tydligen alltid utf8 oavsett vilket charset projektet var inställt på. Så jag ändrade till latin1 och då började tecknen fungera.

Men sen har jag ju gjort bort mig fullständigt. Jag hade en include-fil som inkluderades längre ned i php-filen som ändrade headern igen. Jag tyckte verkligen att jag gjorde test med en enkel fil med enbart header-funktionen men tydligen inte.

Förlåt för att ni lade ned så mycket energi på mitt problem i onödan!

131 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)