zlib / libz.dylib解压缩

时间:2011-08-03 08:13:45

标签: php objective-c http-post zlib compression

我是php的新手,需要一些脚本帮助。无法弄清楚为什么当打开工作正常时写入不起作用。 我收到的文件是使用使用libz.dylib框架的- (NSData *)compress:(NSData *) from this example压缩的。

代码:

<?php
error_reporting(E_ALL);
$dir = "upload/";
if(!file_exists($dir)){
    mkdir($dir);
}

$target = $dir . basename($_FILES['uploaded']['name']);

$zip = $target . ".gz";
$file = $target . ".jpeg";

if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $zip))
{
    $arr = gzfile($zip);

    if(is_writable($dir)){
        if(! $fh = fopen($file, 'w')){
            echo "NO - cannot open file ($file)";
            exit;
        }

        foreach($arr as $value){
            if(fwrite($fh, $value) === FALSE){
                echo "NO - failed to write to file ($file)";
                exit;
            }
        }
        fclose($fh);
        echo "YES - successfully written to file ($file)";
    }
    else{
        echo "NO - folder ($dir) not writable";
    }
}
else {
    echo "NO - unable to move_uploaded_file";
}
?>

解压缩不起作用。帖子请求也与上面的example相同。 有谁知道什么是错的?示例中的compress方法使用什么压缩? (放气或压缩或其他东西)

帖子的代码如下:

- (NSURLRequest *)postRequestWithURL: (NSURL *)url  
                                data: (NSData *)data   // IN
                             boundry: (NSString *)boundry // IN
{
    // from http://www.cocoadev.com/index.pl?HTTPFileUpload
    NSMutableURLRequest *urlRequest =
    [NSMutableURLRequest requestWithURL:url];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setValue:
     [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundry]
      forHTTPHeaderField:@"Content-Type"];

    NSMutableData *postData =
    [NSMutableData dataWithCapacity:[data length] + 512];
    [postData appendData:
     [[NSString stringWithFormat:@"--%@\r\n", boundry] dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:
     [[NSString stringWithFormat:
       @"Content-Disposition: form-data; name=\"%@\"; filename=\"test%d\"\r\n", FORM_FLE_INPUT, counter++]
      dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData: 
     [@"Content-Type: application/gzip\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData: 
     [@"Content-Encoding: gzip\r\n\r\n"dataUsingEncoding:NSUTF8StringEncoding]];
    [postData appendData:data];
    [postData appendData:
     [[NSString stringWithFormat:@"\r\n--%@--\r\n", boundry] dataUsingEncoding:NSUTF8StringEncoding]];

    [urlRequest setHTTPBody:postData];
    return urlRequest;
}

与cocoadev的例子基本相同,但我添加了

[postData appendData: [@"Content-Type: application/gzip\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData: [@"Content-Encoding: gzip\r\n\r\n"dataUsingEncoding:NSUTF8StringEncoding]]; 

因为我虽然这会对gfile($file)有所帮助但是当我尝试在终端中压缩.gz时我仍然会收到错误 gzip:upload / test1.gz:不是gzip格式

我还在this site上读到如果我将 Content-Type = gzip (如上所述)添加到HTTP Post请求中,Integration Appliance将解压缩HTTP帖子正文但是我无法让这个工作。 (我用cocoadev中的一个非常简单的php脚本尝试了这个,因为我不需要gzfile() - 我的php-scrip中的东西)

1 个答案:

答案 0 :(得分:0)

尝试启用警告和通知输出。它可以帮助您获得更详细的信息。 只是把

error_reporting(E_ALL);

代码的第一行