2011-08-03 20 views
0

私は全く新しいPHPです。スクリプトに関する助けが必要です。オープンがうまくいっても書き込みがうまくいかない理由を理解できません。 受信したファイルは、libz.dylibフレームワークを使用する- (NSData *)compress:(NSData *)from this exampleを使用して圧縮されています。zlib/libz.dylib解凍

コード:

<?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メソッドはどの圧縮を使用しますか? cocoadevからの例のように

- (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; 
} 

基本的に同じですが、私は理由

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

を追加しました:ポストのためのコードは次のようになります

を(収縮または圧縮または他の何か)私はこれがgfile($file)を助けるが、私がターミナルの.gzをgunzipしようとすると、まだエラーが出る。gzip:upload/test1.gz:gzipフォーマットではない

this site私はContent-Type = gzipをHTTP Post要求に(上記のように)追加すると、インテグレーションアプライアンスはHTTPポストボディを解凍しますが、これを動作させることはできません。 (私はPHPのスクリプトでgzfile() -stuffを必要としないので、私はcocoadevの例にある非常に単純なPHPスクリプトでこれを試しました)

答えて

0

警告と通知の出力を有効にしてみてください。より詳細な情報を得るのに役立つかもしれません。 はちょうどあなたのコード

+0

の最初の行で

error_reporting(E_ALL); 

を入れてエラーが@heximalをエコーされますか?どこで見ることができますか? –

+0

は、スクリプトをどこで実行するかによって異なります。コマンドラインインターフェイスで起動すると、コンソールに警告が表示されます。ブラウザでスクリプトを実行すると、生成されたHTMLコードに警告が表示されます。 – heximal

+0

OKブラウザで実行すると、「NO2」のままです。/ –