Не удается POST к веб-серверу с iPhone, используя скрипт PHP - PullRequest
0 голосов
/ 15 августа 2011

Ну, я довольно новичок в разработке для iphone и PHP и пытаюсь просто разместить изображение локально на моем веб-сервере (я уже настроил веб-сервер). По какой-то причине мой PHP-скрипт выполняется, хотя файл не сохраняется.

Я уверен, что это самая основная проблема, но я просто не могу ее найти. ДЕЙСТВИТЕЛЬНО был бы признателен вам, ребята, за помощь. Спасибо!

Код моей цели-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
        )

)

1 Ответ

2 голосов
/ 15 августа 2011

Ваш звонок неверен. Вы должны указать имя файла для места назначения. Вы указали только каталог, поэтому вызов не выполняется. PHP не создаст для вас имя файла, вы должны указать его самостоятельно.

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