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.


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

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