php - 从 php 服务器接收文本文件到 ios 应用程序

标签 php ios objective-c httpresponse

我创建了一个 php 服务器,它创建一个文本文件,该文件应该返回到 iOS 应用程序,并与之通信,但我有一些 Unresolved 问题:

  1. 如何返回使用 PHP 在服务器端创建的文本文件?
  2. 如何在ios应用端接收文件?

我定义了这段代码:

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
 NSString *result = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];

这里的数据是应该从服务器返回的结果,但我该如何实现呢?

这是我的 php 文件代码:

$za = new ZipArchive(); 
$za->open('/Applications/XAMPP/xamppfiles/temp/test.zip');  
$fp = fopen ('/Applications/XAMPP/xamppfiles/temp/myText.txt',"wb");    
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    print_r( basename( $stat['name'] ) . PHP_EOL );         
    $content = basename( $stat['name'] ) . PHP_EOL ;
fwrite($fp,$content);
}

fclose($fp);

最佳答案

推荐

简短回答

如何返回使用 PHP 在服务器端创建的文本文件?

使用从 URL 提取文件的基础对象。繁重的工作由 Php 完成来生成文件。您只需将其存入可通过网络访问的位置即可。如果安全性是一个问题,您将需要更深入地了解 Secure Transport Reference 中的各种选项。 (如果需要,还可以在堆栈溢出中搜索 ssl 的问题)。

ios app端如何接收文件?

基本上选择一个基础对象,然后使用它的 writeToFile 方法(详细信息下显示的示例)。 NSURLConnectionDelegate的扩展使用协议(protocol)或 NSURLSession类(请参阅向 session 添加下载任务部分 - 需要 iOS7+)。

示例

如果您想继续使用字符串来移动数据,您可能需要查看字符串编程指南 ( link ) 中的示例:

该示例包含您在创建字符串后想要执行的关键任务:

NSURL *URL = ...;
NSString *string = ...;
NSError *error;
BOOL ok = [string writeToURL:URL atomically:YES
                  encoding:NSUnicodeStringEncoding error:&error];
if (!ok) {
    // an error occurred
    NSLog(@"Error writing file at %@\n%@",
              path, [error localizedFailureReason]);
    // implementation continues ...

详细信息

您可以使用 Web 服务器的内置功能来支持文件分发。因此,在这种情况下,Php 可以将文本文件存放到可通过 Web 访问的文件夹中。在可访问的 Web 地址中创建文件后,您可以考虑使用 ...withContentsOfURL 方法之一,该方法可以将文件转换为某种可用的数据对象...

//transform file contents into array
NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:@"https://www.somelocation.com/temp/test.text"]];

//transform file contents into nsdata
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://www.somelocation.com/temp/test.text"]];

//transform file contents into dictionary
NSDictionary * dictionary = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"https://www.somelocation.com/temp/test.text"]]

如果您希望将文件下载到系统(然后在本地处理),您可以转换使用 writeToFile 方法创建的对象。在这种情况下,我建议您使用 NSData 检索文件,然后可以使用以下方法将该文件保存到本地目录中:

//use this instance method on the NSData object 
    - (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr

最后,你还可以将整个流程包装成一个NSURLSessionDataTask如果您使用的是iOS7。这将允许您以异步方式执行任务(有关详细信息,请参阅类引用)。

- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler

甚至有一种方法可以使用 CIImage 类上的此方法将内容转换为图像。

+ (CIImage *)imageWithContentsOfURL:(NSURL *)url options:(NSDictionary *)d

需要考虑的其他因素

您可能还想在下载后使用该文件,我建议您查看 NSFileHandle类引用中有一个关于使用 block 读取和写入的有趣部分。

其他考虑因素是可能需要根据数据的敏感性来保护文件。这可能会影响您选择实现的流程。

关于php - 从 php 服务器接收文本文件到 ios 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20120130/

相关文章:

ios - 从 Alamofire 下载请求访问文件

ios - 无限循环试图从 IB 中的 xib 创建自定义 View

iphone - NSURLConnection发送异步请求: Blocking Main Thread

ios - Storyboard Segues 的命名约定

php 脚本命令行 $_POST 参数

php - PDO 执行数组 - 安全吗?

iphone - wait_fences : failed to receive reply: 10004003 in UIImagePickerController

ios - Core Data 崩溃时出现错误 "dying managedobjectcontext"

php - 在 PHP 中从线性数组创建关联数组

php - CodeIgniter多维数组存储在mysql数据库单列中