PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器

Posted

技术标签:

【中文标题】PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器【英文标题】:PHP picture upload works on localhost but not on GoDaddy server 【发布时间】:2014-07-24 03:08:51 【问题描述】:

我们一直在开发适用于 iosandroid 的应用程序。我们的一个视图使用 POST 将图片上传到服务器。 android 版本可以在我们的本地服务器和网站上运行。但是,iOS 版本目前仅在我们的本地服务器上运行。以下是用于编写 POST 请求的代码:

NSData* imageData = UIImageJPEGRepresentation(image, 1.0);

    // Create the request.
    NSString* afterURL = [NSString stringWithFormat:@"upload.php?username=%@",username];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
                                    initWithURL:[NSURL URLWithString:
                                                 [NSString stringWithFormat:@"%@%@",url,afterURL]]];
    [request setHTTPMethod:@"POST"];

    //------------------------------------------------------
    // used code from this tutorial: http://www.iriphon.com/2011/11/09/ios-uploading-an-image-from-your-iphone-to-a-server/
    NSString *boundary = @"-----InstantLabor";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];

    // Now we need to append the different data 'segments'. We first start by adding the boundary.
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // This line of code came from http://***.com/questions/20728317/upload-image-to-the-php-server-from-ios
    //   By creating the string this way instead of the other way, we were able to successfully upload the picture!
    /*
    [body appendData:[[NSString stringWithString:
                       [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", @"dl"]]
                      dataUsingEncoding:NSUTF8StringEncoding]];
     */

     [body appendData:[@"Content-Disposition: form-data; name=\"attachment[userfile]\";filename=\"dl.jpg\"\r\n"
                      dataUsingEncoding:NSUTF8StringEncoding]];


    // We now need to tell the receiver what content type we have
    // In my case it's a png image. If you have a jpg, set it to 'image/jpg'
    [body appendData:[@"Content-Type: image/jpg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

    // Now we append the actual image data
    [body appendData:[NSData dataWithData:imageData]];

    // and again the delimiting boundary
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // adding the body we've created to the request
    [request setHTTPBody:body];
    //-----------------------------------------------------

    // Create url connection and fire request
    _parsedData = nil;
    [NSURLConnection connectionWithRequest:request delegate:self];

当我们试图让它在本地服务器上工作时,上面的代码直到我们切换后才工作

[body appendData:[@"Content-Disposition: form-data; name=\"attachment[userfile]\";filename=\"dl.jpg\"\r\n"
                  dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithString:
                   [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", @"dl"]]
                  dataUsingEncoding:NSUTF8StringEncoding]];

即使它正在创建相同的字符串,一个有效而另一个无效;但是在连接到网站时它们都不起作用。我们尝试过的所有东西最终都会吐出来

Undefined index: userfile

回到应用程序。由于其中一个有效,我们知道这不是内存问题或权限问题。我们不知道还有什么可能导致问题。

提前感谢您的帮助。

【问题讨论】:

这是交易,如果您遇到网络问题,请运行网络分析器并了解发生了什么,Charles Proxy 是 OSX 的首选分析器,可免费试用 30 天。在两者上运行 Charles Proxy 并找出不同之处。坏消息是你真的应该学习一些关于 http 请求的知识——“它不会伤害你”:Ritchie Havens 您检查过 php.ini 设置吗?由于通知是用户文件,我假设这是您的文件上传字段?可能是 post_max_size(或 upload_max_filesize)太小而无法处理图像。 是的@David,当前的 post_max_size 设置为 1Gb 以确保它足够大。问题似乎是图片没有正确发送,即使它在我们的本地服务器上工作。谢谢。 要求托管站点进行调试,有时他们的设置会覆盖您的 php.ini。一旦您确定用户文件已从浏览器正确提交,并且 localhost 可以处理这种情况... 你找到答案了吗? 【参考方案1】:

经过两天的调整,测试。等我们没有运气解决这个问题。相反,我们决定合并 AFNetworking 并按照此Upload image from iOS to PHP 让我们的图片上传工作。

【讨论】:

以上是关于PHP 图片上传适用于本地主机,但不适用于 GoDaddy 服务器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 适用于本地主机,但不适用于网站

PHP header('Content-Type : image/jpeg') 适用于本地主机但不适用于真实服务器

Java Spring MVC WebSocket 应用程序仅适用于本地应用程序服务器,但不适用于 openshift 主机

Verbatim PHP 代码适用于当前的实时站点,但不适用于新站点(本地或实时)

file_exists 或 getimagesize 仅适用于本地、绝对文件路径,但不适用于 PHP 中的 URL

Elmah 适用于 localhost,但不适用于生产?