-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
)
)
ありがとう、Marc、しかし私は同じ動作をしています - "move_uploaded_file"は失敗します。作成するファイルの名前はわかりませんでしたが、安全な側にするために、同じ名前、つまり:./upload/myfile.jpgという名前を付けて作成しました。思考? – TommyG
あなたのウェブサーバがそのアップロードディレクトリにファイルを作成または書き込む権限を持っていることを確認してください。 PHPのエラーログを調べて、何か起きているかどうか確認してください。同じ名前のファイルが存在する場合は、Webサーバーがそのファイルを上書きできることを確認してください。 –
愚かな質問を申し訳ありませんが、Webサーバーに正しい書き込み権限があることを確認する方法はありますか?本当にありがとう。 – TommyG