2011-08-15 1 views
-1

私はiPhoneとPHPの両方の開発にかなり新しく、イメージをローカルに自分のWebサーバーに公開しようとしています(既にWebサーバーをセットアップしています) 。何らかの理由で、私のPHPスクリプトが実行されていますが、ファイルは保存されていません。PHPスクリプトを使ってiPhoneからWebサーバーにPOSTできない

ここでは、これが最も基本的な問題だと確信していますが、私は問題を見つけることができません。本当に皆さんの助けに感謝します。ありがとう!

私のObjective-Cのコード:

UIImageView *imageView = [[UIImageView alloc] init]; 
imageView.image = [UIImage imageNamed:@"13.png"]; 

NSData *imageData = UIImageJPEGRepresentation(imageView.image, 90); 
NSString *urlString = @"http://localhost/uploader.php"; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 
[request setTimeoutInterval:60.0]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\";filename=\"myfile.jpg\"\r\n"] 
        dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:imageData]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:body]; 
NSLog(@"%@",[[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]); 

私のPHPスクリプト:

<?php 
$target = "./upload/"; 
$target = $target.basename($_FILES['userfile']['name']) ; 
$check = getimagesize($_FILES['userfile']['tmp_name']); 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], './upload/')) { 
    echo "YES"; 
} 
else 
    echo "NO"; 

?> 

ものはPHPでこれらの変数を印刷するときに、私が得る値は次のとおりです。

print_r($target); 

./upload/myfile.jpg 

print_r($check[0]); 

320 

print_r($_REQUEST); 

Array 
(
) 


print_r($_FILES[userfile]); 

Array 
(
    [name] => myfile.jpg 
    [type] => application/octet-stream 
    [tmp_name] => /private/var/tmp/phpWJE4UC 
    [error] => 0 
    [size] => 8829 
) 

print_r($_FILES[name]): 

(empty) 

print_r($_FILES[type]); 

(empty) 

print_r($_FILES[tmp_name]); 

(empty) 

print_r($_FILES[error]); 

(empty) 

print_r($_FILES[size]); 

(empty) 

print_r($_FILES); 


Array 
(
    [userfile] => Array 
     (
      [name] => myfile.jpg 
      [type] => application/octet-stream 
      [tmp_name] => /private/var/tmp/phpMvJ4oR 
      [error] => 0 
      [size] => 8829 
     ) 

) 

答えて

2

あなた移動呼び出しが間違っています。宛先のファイル名を指定する必要があります。あなたはディレクトリを提供しただけなので、呼び出しは失敗します。 PHPはファイル名を作成しません。あなた自身で指定する必要があります。

if (move_uploaded_file($_FILES['userfile']['tmp_name'], './upload/name_of_file_to_write')) { 
                    ^^^^^^^^^^^^^^^^^^^^^ 
+0

ありがとう、Marc、しかし私は同じ動作をしています - "move_uploaded_file"は失敗します。作成するファイルの名前はわかりませんでしたが、安全な側にするために、同じ名前、つまり:./upload/myfile.jpgという名前を付けて作成しました。思考? – TommyG

+1

あなたのウェブサーバがそのアップロードディレクトリにファイルを作成または書き込む権限を持っていることを確認してください。 PHPのエラーログを調べて、何か起きているかどうか確認してください。同じ名前のファイルが存在する場合は、Webサーバーがそのファイルを上書きできることを確認してください。 –

+0

愚かな質問を申し訳ありませんが、Webサーバーに正しい書き込み権限があることを確認する方法はありますか?本当にありがとう。 – TommyG

関連する問題