Objective-C和PHP文件上载和移动

Objective-C和PHP文件上载和移动,php,ios,objective-c,networking,mknetworkkit,Php,Ios,Objective C,Networking,Mknetworkkit,我在尝试将上传的文件放入正确的目录时遇到了一些麻烦,非常类似于:但是,代码和权限似乎都很好。我将本教程用于Objective-C部分:下面是应用程序和PHP脚本的完整实现。然而,问题可能是Objective-C从未实际传输图像。如果你需要更多信息,请告诉我。PHP返回: 报告文件上载成功,但实际上并未上载jpeg。 - (IBAction)shareWithFriends:(id)sender { if (imageView.image != nil) { NSData *image

我在尝试将上传的文件放入正确的目录时遇到了一些麻烦,非常类似于:但是,代码和权限似乎都很好。我将本教程用于Objective-C部分:下面是应用程序和PHP脚本的完整实现。然而,问题可能是Objective-C从未实际传输图像。如果你需要更多信息,请告诉我。PHP返回:

报告文件上载成功,但实际上并未上载jpeg。

- (IBAction)shareWithFriends:(id)sender
{

if (imageView.image != nil)
{
    NSData *image = UIImageJPEGRepresentation(imageView.image, 0.1);

    self.fileUploadClient = [[fileUploadClient alloc] initWithHostName:@"shipstudent.com" customHeaderFields:nil];

    NSMutableDictionary *postParameters = [NSMutableDictionary dictionaryWithObject:@"Animal" forKey:@"appID"];

    self.fileOperation = [self.fileUploadClient postData:postParameters path:@"/animal/pictureuploads.php"];

    [self.fileOperation addData:image forKey:@"userfl" mimeType:@"image/jpeg" fileName:@"upload.jpg"];

    [self.fileOperation addCompletionHandler:^(MKNetworkOperation *operation)
    {

        NSLog(@"%@",[operation responseString]);
    }

     errorHandler:^(MKNetworkOperation *errorOperation, NSError *error)
     {

         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles: nil];

         [alert show];

     }];

    [self.fileUploadClient enqueueOperation:self.fileOperation];

}
else
{

}
}

PHP:


从错误中可以看出,您正在尝试无处写入。您的
$uploaddir
变量从未设置,
$file
将始终为null,因此您告诉它写入
$uploadfile=null。空
,请尝试以下操作:

if(!empty($_POST)) {

    $directory = $_SERVER['DOCUMENT_ROOT'] . '/appphotos/';
    // $file = basename($_FILES['userfl']['upload.jpg']);
    $file = basename($_FILES['userfl']['name']);
    // $uploadfile = $uploaddir . $file;
    $uploadfile = $directory . $file;
    $randomPhotoID = md5(rand() * time());

    echo 'file=' . $file;

    //where the error resides
    if (move_uploaded_file($_FILES['userfl']['tmp_name'], $uploadfile)) {
        echo 'successful';
    } else {
        echo 'unsuccessful';
    }

} else {
    echo 'empty post data' ;
}

我发现,经过一些调试后,它将不会写的形象,即使它说它是成功的。此外,除非我这样做,否则目录不会写入任何内容:$directory=$\u SERVER['DOCUMENT\u ROOT']/appphotos';而不是$directory=$\u SERVER['DOCUMENT\u ROOT']appphotos/';这是因为
$\u服务器['DOCUMENT\u ROOT']
没有以目录分隔符结尾,所以请改用
/appphotos/
。还有,是777号目录吗?如果没有,请从命令行运行
chmod 777/path/to/dir/here/appphotos
。如果使用appphotos文件夹/after,则会返回错误:警告:移动上传的文件():无法将第40行的“/tmp/php0dqQSS”移动到/home/shipstrud/public_html/appphotos/”中的“/home/shipstrud/public_html/animal/pictureuploads.php”中的“/home/shipstrud/public_html/appphotos/”
可能未提供文件名,或者存在权限问题。
if(!empty($_POST)) {

    $directory = $_SERVER['DOCUMENT_ROOT'] . '/appphotos/';
    // $file = basename($_FILES['userfl']['upload.jpg']);
    $file = basename($_FILES['userfl']['name']);
    // $uploadfile = $uploaddir . $file;
    $uploadfile = $directory . $file;
    $randomPhotoID = md5(rand() * time());

    echo 'file=' . $file;

    //where the error resides
    if (move_uploaded_file($_FILES['userfl']['tmp_name'], $uploadfile)) {
        echo 'successful';
    } else {
        echo 'unsuccessful';
    }

} else {
    echo 'empty post data' ;
}