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

[JS/PHP] setRequestHeader wordt niet goed verstuurd

Pagina: 1
Acties:

  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 23:38

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Beetje lastig topic titel om te verzinnen.

Doel
Ik wil door middel van een XMLHttpRequest(); een file versturen. Ik gebruik FireFox 16.0.2. om te testen.

Relevante code

JavaScript:
1
2
3
4
5
6
7
8
9
var xhr = new XMLHttpRequest();
// wat validaties

// start upload
xhr.open("POST", $id("upload").action, true);
xhr.setRequestHeader("X_FILENAME", file.name);
xhr.setRequestHeader("X_FILE_SIZE", file.size);
xhr.setRequestHeader("X_FILE_TYPE", file.type);
xhr.send(file);


$id("upload") verwijst naar mijn upload file, namelijke upload-file.php. Dit werkt ook, want als ik via Firebug bekijk zie ik het volgende terug komen bij verzoekheaders:
X_FILENAME scannen0001.jpg
X_FILE_SIZE 257596
X_FILE_TYPE image/jpeg
Onder het tabblad POST komt het plaatje ook terug (slechts een stukje van de code)
ÿØÿáxExif��II*���������HP�����z�������†�������Ž���(������������������–���i‡����Æ�������������������HP pst_p02d�È������È�������������ÿ������€������ÿ������€������ÿ������ ������0220����D��‘������ ����0100 ������� ������ ����p�� €������� €�������€���X������2012:11:11 21:36:11��� 0A0 7A0 8A0HPSI0002�� 11A0 0A0 0A0 0�� 21A0 0A0 0A0 0�� 31A0 0A0 0A0 0�� 32A0 0A0 0A0 0�� 41A0 0A0 0A0 0�� 42A0 0A0 0A0 0�� 43A0 0A0 0A0 0�� 44A0 0A0 0A0 0�� 51A0 0A0 0A0 0�� 61A0 1A0 1A0 0�� 62A0 0A0 0A0 0�� 63A0 0A0 0A0 0�� 64A0 0A0 0A0 0�� 71A0 1A0 1A0 0�� 81A0 4A0 1A0 0�� 82A0 4A0 1A0 0�� 83A0 4A0 1A0 0�� 84A0 4A0 1A0 0��ÿÛ�C�ÿÄ¢���������� �������
Ik ben dus tot de conclusie gekomen dat mijn javascript/form gedeelte klopt, puur kijkend naar wat Firebug mij terug geeft. Maar wellicht klopt mijn conclusie niet. Voor het debuggen heb ik mijn PHP terug gebracht naar de basis.

De php code

PHP:
1
2
3
4
5
6
7
8
$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);

if ($fn) {
    die ('gelukt');
}
else {
    die ('epic fail');
}



Echter, mijn output van upload-file.php is
epic fail
:)

Firebug geeft echter wel aan dat deze header verstuurd is. Waarom kan ik deze vervolgens niet uitlezen in PHP?

Wat ik heb geprobeerd:

1. Content type toevoegen, via Google gevonden:

code:
1
2
setRequestHeader('Content-Type',
    'application/x-www-form-urlencoded');
Geen succes

2. Slechts 1 header versturen (file.name), geen succes

3. Ipv $_REQUEST $_POST gebruikt (via google gevonden), geen succes

Kan iemand mij een duwtje de goede richting opgeven :) ?

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:24

MueR

Admin Devschuur® & Discord

is niet lief

Waarom maak je geen gebruik van de HTML5 File API?

Anyone who gets in between me and my morning coffee should be insecure.


  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 23:38

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
Dat is een goede vraag. Ik heb veel research gedaan met Google voordat ik voor deze oplossing had gekozen, maar jouw HTML5 File API link is interessant. Eerst dacht ik dat Jquery verplicht was gezien de testcase, maar dat blijkt niet zo te zijn

Dank voor de link, ik ga daar eens mee aan de slag :)

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Afgezien daarvan beschrijft de $_SERVER-manual ongeveer dat dit niet gaat werken:
You may or may not find any of the following elements in $_SERVER.
Hierbij wordt niet gezegd dat willekeurige HTTP-request-headers aan $_SERVER worden toegevoegd. Er zijn een aantal standaardheaders waarvan de inhoud inderdaad in de $_SERVER-array wordt geplaatst, maar voor het leeuwendeel geldt dat je ze zelf moet uitlezen.

Jij zoekt dus getallheaders() ("Fetch all HTTP request headers"). :)

[ Voor 15% gewijzigd door CodeCaster op 22-11-2012 13:50 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • We Are Borg
  • Registratie: April 2000
  • Laatst online: 23:38

We Are Borg

Moderator Wonen & Mobiliteit / General Chat
Topicstarter
CodeCaster: de $_SERVER wordt gebruikt in alle turials vandaar dat ik ook de aanname deed dat dit de beste manier was om dit werkend te krijgen. Ik ga kijken naar jouw linkje want wil mijn voorbeeld, los van de terechte opmerking van MueR, toch werkend krijgen. Wil weten waar het fout gaat :)

Edit:

code:
1
2
3
foreach (getallheaders() as $name => $value) {
    $Headers[$name] = $value;
}


En dan met de $Headers controleren of de filename doorkomt en het werkt wel _/-\o_ Dank hiervoor! Ben wel benieuwd waarom de turials werken met $_SERVER en dat dat bij mij dan niet werkt. Zal misschien een configuratie ding zijn.

Nu eens kijken naar de HTML 5 API :)

[ Voor 39% gewijzigd door We Are Borg op 22-11-2012 13:55 ]