WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP -> Skriva zip-filer. (https://www.wn.se/forum/showthread.php?t=33184)

crazzy 2008-11-10 17:14

Sitter och försöker parsa ett mms från cellsynt. Dem ska ju tvunget skicka det som en zip-fil. Detta innebär att jag har en zipfil i $_POST['content']. Koden ska skriva den till en temporär fil, packa upp och läsa in alla filer och stoppa i en databas. Mina problem är dessa:

* Det skapas av någon udda anledning två filer, en med extension och en utan. Den utan extension har inget innehåll heller men den ska inte existera över huvudtaget.
* Den filen med extension och innehåll ser ut som en random zipfil i nano men funkar inte att extrahera.

Kod:
Kod:

<?php
//Check if this is possibly an attempt to crack us
$haxx = false;
if(!isset($_POST['originator'])) $haxx = true;
if(!isset($_POST['destination'])) $haxx = true;
if(!isset($_POST['subject'])) $haxx = true;
if(!isset($_POST['content'])) $haxx = true;
if($haxx) die("Please don't try to h4xx0R us!");

//Create zip archive
$tempname = tempnam('/tmp','MMS').".zip";
$handle = fopen($tempname, 'w');
fwrite($handle,$_POST['content']);
fclose($handle);
?>

Felmeddelande från unzip:
Citat:

twister# unzip /tmp/MMSx4EF55.zip
Archive: /tmp/MMSx4EF55.zip
0\0�\\\0\0\0\0
caution: zipfile comment truncated
warning [/tmp/MMSx4EF55.zip]: zipfile claims to be last disk of a multi-part archive;
attempting to process anyway, assuming all parts have been concatenated
together in order. Expect "errors" and warnings...true multi-part support
doesn't exist yet (coming soon).
error [/tmp/MMSx4EF55.zip]: missing 1587817809 bytes in zipfile
(attempting to process anyway)
error [/tmp/MMSx4EF55.zip]: attempt to seek before beginning of zipfile
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)

En 'ls -al /tmp' ger:
Citat:


twister# ls -al /tmp
total 104
drwxrwxrwt 5 root root 16384 2008-11-10 17:02 .
drwxr-xr-x 20 root root 4096 2008-11-02 15:29 ..
drwxrwxrwt 2 root root 1 2008-10-16 13:28 .ICE-unix
-rw------- 1 www-data www-data 0 2008-11-10 16:51 MMSHe3KVd
-rw-r--r-- 1 www-data www-data 21964 2008-11-10 16:51 MMSHe3KVd.zip
-rw------- 1 www-data www-data 0 2008-11-10 17:02 MMSx4EF55
-rw-r--r-- 1 www-data www-data 24369 2008-11-10 17:02 MMSx4EF55.zip
-rw-r--r-- 1 root root 26624 2008-11-10 15:37 mms.zip
drwxr-xr-x 2 root root 1 2008-11-02 11:10 .webmin


WizKid 2008-11-10 18:52

tempnam skapar en unik-fil. Den genererar inte bara ett unikt filnamn.

crazzy 2008-11-10 22:48

Hmm, då vet jag hur jag fixar det. Men jag vet fortfarande inte hur jag fixar så filen fungerar.
Har testat att behandla den med utf8_encode vs utf8_decode för att se om det kunde hjälpa mej,
samma skit ändå. Någon som ser vad felet är / har jobbat med mms och cellsynt tidigare?

MMC 2008-11-10 23:54

Det har nog inte att göra med Cellsynt direkt. Kolla vilka argument du får i $_POST, kolla om din storlek är rimlig. Dina zipfiler är ju typ 20k, men unzip säger att den förväntar sig att filen ska vara typ 1,5 GB. Inget av det känns särskilt rimligt för ett MMS?

Förresten tycker jag att det vore bra om du körde med IP-checkar för att se till att bara Cellsynts servrar får skicka data till dig, istället för att du ska köra en massa checkar på inputen för att se om den är skadlig.

crazzy 2008-11-11 08:57

Citat:

Originally posted by MMC@Nov 10 2008, 23:54
Det har nog inte att göra med Cellsynt direkt. Kolla vilka argument du får i _POST, kolla om din storlek är rimlig. Dina zipfiler är ju typ 20k, men unzip säger att den förväntar sig att filen ska vara typ 1,5 GB. Inget av det känns särskilt rimligt för ett MMS?
Förresten tycker jag att det vore bra om du körde med IP-checkar för att se till att bara Cellsynts servrar får skicka data till dig, istället för att du ska köra en massa checkar på inputen för att se om den är skadlig.

Ip-checkar är ett senare skede, just nu vill jag bara att skiten ska funka.

Jag får alla argument jag förväntar mej, problemet är bara att php's funktioner för att skriva till disk tydligen inte klarar av att skriva datan som den är.

Jonas 2008-11-11 10:19

Skickar inte Cellsynt content som en base64 zipfil?

crazzy 2008-11-11 10:44

Citat:

Originally posted by Jonas@Nov 11 2008, 10:19
Skickar inte Cellsynt content som en base64 zipfil?

Ingen aning, dem har ingen dokumentation alls. Men ska testa att köra en decode.

crazzy 2008-11-11 11:07

Okej, med en base64_decode försvann allt utom en rad :(

SimonP 2008-11-11 11:24

Från PHP manualen:

"Note: For portability, it is strongly recommended that you always use the 'b' flag when opening files with fopen(). "

Det behöver inte vara det som är fel i ditt fall, men ändå...

crazzy 2008-11-11 11:32

Citat:

Originally posted by SimonP@Nov 11 2008, 11:24
Från PHP manualen:
Note: For portability, it is strongly recommended that you always use the b flag when opening files with fopen().
Det behöver inte vara det som är fel i ditt fall, men ändå...

Har redan testat det, funkar inte.

Tobbe 2008-11-11 17:51

Hej! Jag ber om ursäkt för sent svar, såg tråden först nu.

Ni kan alltid kontakta vår tekniska support på [email protected] om ni har några frågor. Jag har bett en kollega maila dig för att reda ut eventuella frågetecken. Om du skulle se tråden innan mailet så får du även ett svar från vår tekniska support här som tog en titt på ditt problem:

Citat:


Jag kikade på den data som postats på WN och enligt den hade han 17:02 mottagit en fil som var 24639 bytes. Från vårt system lämnade kl 17:01 ett MMS som var 23902 bytes.

Storleken på hans mottagna och det vi skickade stämde alltså inte. Ett vanligt förekommande fel är att man i PHP har magic quotes påslaget vilket i detta fall skulle förvanska datan.

För att testa sparade jag i detta fall ner MMS:et till en fil "mms.zip" och kollade hur många bytes den skulle vara om magic quotes är påslaget (genom att köra addslashes() på filinnehållet):

<?php
echo strlen(addslashes(file_get_contents("mms.zip")));


Resultat:
24369

Dvs så många bytes hans fil är. Be honom att stänga av magic quotes för servern / virtual hosten / temporärt eller köra stripslashes($_POST['content']) före han använder innehållet så kommer problemen lösa sig.

Tveka aldrig att höra av dig direkt till mig eller vår support om det dyker upp några frågor i framtiden!

Mvh, Tobias

crazzy 2008-11-11 18:03

Tackar!

Magic quotes måste stängas av när jag orkar. Vilken äcklig "feature". Varför ska php påverka mina requests?

Citat:


twister# l /tmp
total 76
drwxrwxrwt *7 root * * root * * 16384 2008-11-11 17:58 .
drwxr-xr-x 20 root * * root * * *4096 2008-11-02 15:29 ..
drwxrwxrwt *2 root * * root * * * * 1 2008-10-16 13:28 .ICE-unix
-rw-r--r-- *1 www-data www-data 13451 2008-11-11 17:58 MMS8CuOMK.zip
drwxr-xr-x *2 root * * root * * * * 1 2008-11-11 14:34 .webmin
drwxrwxrwt *2 root * * root * * * * 1 2008-11-11 14:34 .X11-unix
twister# unzip /tmp/MMS8CuOMK.zip
Archive: */tmp/MMS8CuOMK.zip
*inflating: main.smil * * * * * * *
*inflating: 06-06-08_1450.jpg * * *
*inflating: smil.txt

edit:
Ett tips bara, stoppa in en sektion vid namn "dokumentation" på er sajt.

MMC 2008-11-11 19:07

Det har varit branschstandard att stänga av magic quotes i ganska många år nu. Bara ännu ett exempel på den tråkiga trenden att man startar trådar i WN utan att ens ha pratat med företaget i fråga. Cellsynt har förövrigt riktigt bra dokumentation som du förhoppningsvis fått när du blev kund, men det är ju inte riktigt inriktat på "vanliga misstag du som kund kan göra".

crazzy 2008-11-11 19:44

Citat:

Originally posted by MMC@Nov 11 2008, 19:07
Det har varit branschstandard att stänga av magic quotes i ganska många år nu. Bara ännu ett exempel på den tråkiga trenden att man startar trådar i WN utan att ens ha pratat med företaget i fråga. Cellsynt har förövrigt riktigt bra dokumentation som du förhoppningsvis fått när du blev kund, men det är ju inte riktigt inriktat på vanliga misstag du som kund kan göra.

Jag visste inte ens om att magic quotes fanns. Verkar som det är igång per default under debian. Och vart hittar du den dokumentationen? Inte på deras sajt iallafall.

Sen kanske jag ska tillägga att jag inte är kund hos dem utan att jag kodar detta åt någon annan.

hnn 2008-11-11 21:10

magic_quotes är av standard påslaget.

Och dokumentationen slänger Cellsynt i princip efter en ifall man bara ringer/mailar/smsar dom :).

MMC 2008-11-11 22:02

Ja, det gör det väl ändå mer konstigt att du inte helt enkelt skickade iväg ett mail till Cellsynts support och hörde efter om de hade någon dokumentation? Alla företag låter inte djupgående teknisk information om deras produkter ligga tillgängliga för vem som helst.

Magic Quotes ska såvitt jag vet vara avstängt per default i PHP 5 och användare avråds från att använda det, och det är helt bortplockat i PHP 6.

PHP 4 hade end of life i juli 2007, så använd inte det för nya produktioner...

crazzy 2008-11-11 22:26

Aldrig använt PHP4, kommer aldrig göra. Och ska göra bättre research i fortsättningen. Och se till att min php.ini är som jag vill ha den.

edit: yay, 500 posts :)

MMC 2008-11-11 22:48

Hoppas inte du tagit illa upp, det är inget personligt utan jag är bara så trött på trådar som denna där man anklagar diverse småföretag för saker som inte är deras fel... det finns tillräckligt med klåpare där ute för att man ska ge sig på seriösa företag! :)

crazzy 2008-11-11 23:38

Nädå, ingen fara. :)

Undrar bara vem fan som en gång i tiden uppfann skräpet magic quotes?
Han kan ju inte ha varit frisk någonstans.
Och ännu mindre, idioten som tyckte det skulle vara on by default.

SimonP 2008-11-12 09:19

Citat:

Originally posted by crazzy@Nov 12 2008, 00:38
Nädå, ingen fara. :)

Undrar bara vem fan som en gång i tiden uppfann skräpet magic quotes?
Han kan ju inte ha varit frisk någonstans.
Och ännu mindre, idioten som tyckte det skulle vara on by default.

Magic quotes har garanterat räddat ett flertal sidor från att bli hackade, nuförtiden finns det dock bättre sätt att skydda sig.

http://en.wikipedia.org/wiki/Magic_quotes


Alla tider är GMT +2. Klockan är nu 23:16.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson