向PHP传递数据的选项有哪些?
凭借最少的“真实”编程经验,我正在从事一个项目,该项目将我已经构建的FileMaker Pro解决方案与使用FileMaker服务器的PHP API的本机iOS应用程序集成在一起。iOS应用程序是针对iPhone的,并且是用Swift编写的 我们正试图了解处理某些场景的最有效方法,特别是在将数据写回服务器时。让我们使用地址簿的简单示例。当用户导航到联系人记录时,他/她可以选择一个字段,编辑然后保存其内容 虽然我们已经实现了许多将数据写入服务器的函数,但它们都相对简单(比如扫描条形码、发送php请求以触发FM服务器中的脚本,然后将结果呈现给客户端)。对于包含多个字段的联系人记录,似乎通过标准的PHP URL将每个字段的值作为变量发送,其中一些字段可能是段落或照片,这既低效又笨重 对于那些不熟悉FileMaker PHP API的人,下面是一些示例代码,用于演示更新特定联系人记录的过程。示例代码执行以下操作:向PHP传递数据的选项有哪些?,php,ios,swift,filemaker,Php,Ios,Swift,Filemaker,凭借最少的“真实”编程经验,我正在从事一个项目,该项目将我已经构建的FileMaker Pro解决方案与使用FileMaker服务器的PHP API的本机iOS应用程序集成在一起。iOS应用程序是针对iPhone的,并且是用Swift编写的 我们正试图了解处理某些场景的最有效方法,特别是在将数据写回服务器时。让我们使用地址簿的简单示例。当用户导航到联系人记录时,他/她可以选择一个字段,编辑然后保存其内容 虽然我们已经实现了许多将数据写入服务器的函数,但它们都相对简单(比如扫描条形码、发送php请
<?php
require_once 'Filemaker.php';
//connect to db
$fm = new FileMaker();
$fm->setProperty('database', 'fmDbName');
$fm->setProperty('hostspec', '123.45.67.89');
$fm->setProperty('username', 'user');
$fm->setProperty('password', 'password');
//define layout on which to process
$layout = 'php_contacts';
//define variables passed from client
$contactId = $_GET['contactId'];
$first = $_GET['firstName'];
$last = $_GET['lastName'];
$mobile = $_GET['mobile'];
$office = $_GET['office'];
$note = $_GET['note'];
//Find the contact which is being updated
$find = $fm->newFindCommand($layout);
$find->addFindCriterion('contactId', $contactId);
//execute the find
$results = $find->execute();
//check for error
if (FileMaker::isError($result)) {
echo " Error: ".$results." ";
exit;
}
//declare the record being updated
$record = $results->getFirstRecord();
//update the fields
$record->setField('firstName', $first);
$record->setField('lastName', $last);
$record->setField('mobile', $mobile);
$record->setField('office', $office);
$record->setField('note', $note);
?>
我们面临的挑战不是如何实施特定的方法,而是首先要了解哪些选项以及与之相关的任何最佳实践
例如,将变量作为数组或字典从客户端发送到PHP比将它们作为URL中的独立变量发送更好吗?将数据从本机应用程序中的多个字段整齐地推送到PHP服务器的其他选项有哪些
谢谢 我非常确定PHP基本上可以处理HTTP请求,这基本上就是POST和GET 你发送的结构应该根据你的需要来定义,没有完美的解决方案 您应该检查HTTP请求的工作方式:
我很确定PHP基本上可以处理HTTP请求,这基本上就是POST和GET 你发送的结构应该根据你的需要来定义,没有完美的解决方案 您应该检查HTTP请求的工作方式:
根据我的理解,
$\u GET
比$\u POST
慢得多。您应该从应用程序向服务器发送POST请求,该应用程序将传输字符串。通过互联网发送原始图像很容易导致失真和数据丢失。为了将图像作为字符串发送,您将使用Base-64编码。这意味着您将把图像二进制文件转换为返回字符串的编码方案。您可以将此字符串发送到服务器或应用程序进行解码。(注意:您可以使用Base-64编码的图像作为URL,这可能很方便。)
我认为除了使用POST消息或原始JSON(如果可以的话),没有更好的方法在服务器和客户端之间发送数据。Swift和Objective-C有一个名为NSJSONSerialization
的类,您可以使用它转换从PHP脚本返回的JSON,以便稍后在应用程序中使用
从服务器上,您只需在脚本开头的变量中创建一个空数组供以后使用,然后在该数组可用时将信息附加到该数组中(如果您的服务器上有一个图像,您需要对其进行Base-64编码,然后仅在Base-64编码完成后将字符串附加到该数组中)。在脚本结束时——当您将所有要发送到应用程序的数据附加到该数组中时——您可以编写echo json\u encode($thatArray)
将数组作为json发送回应用程序。当然,这意味着您从一开始就希望它是一个关联数组,因为您将拥有键和值对
我将依靠该方法从服务器获取信息并将其翻转(在Swift应用程序中创建一个字典
,然后使用NSJSONSerialization.JSONObjectWithData(数据:NSData,选项:NSJSONReadingOptions,错误:NSErrorPointer)
将字典
转换为JSON。然后创建一个请求,通过POST请求将JSON发送到服务器。当然,您的PHP脚本将使用JSON解码($\u POST['thatJSONFromTheApplication'])
)让应用程序将JSON发送到服务器
这就是我所做的,让我的应用程序和服务器一起工作。如果你读了这篇文章,你有一个更好的想法,请分享 据我理解,
$\u GET
比$\u POST
慢得多。您应该从应用程序向服务器发送POST请求,该应用程序将传输字符串。通过互联网发送原始图像很容易导致失真和数据丢失。为了将图像作为字符串发送,您将使用Base-64编码。这意味着您将把图像二进制文件转换为返回字符串的编码方案。您可以将此字符串发送到服务器或应用程序进行解码。(注意:您可以使用Base-64编码的图像作为URL,这可能很方便。)
我认为除了使用POST消息或原始JSON(如果可以的话),没有更好的方法在服务器和客户端之间发送数据。Swift和Objective-C有一个名为NSJSONSerialization
的类,您可以使用它转换从PHP脚本返回的JSON,以便稍后在应用程序中使用
从服务器上,您只需在脚本开头的变量中创建一个空数组供以后使用,然后在该数组可用时将信息附加到该数组中(如果您的服务器上有一个图像,您需要对其进行Base-64编码,然后仅在Base-64编码完成后将字符串附加到该数组中)
/var/www/myapp/public/
/var/www/myapp/config/
// File config.php
define('FM_DATABASE', 'fmdbname');
define('FM_HOSTSPEC', '123.45.67.89');
define('FM_USERNAME', 'user');
define('FM_PASSWORD', 'password);
$fm = new FileMaker(FM_DATABASE, FM_HOSTSPEC, FM_USERNAME, FM_PASSWORD);
if($fm->isError($result)){ // this won't produce the deprecated warning.
...
$editQuery = $fm->newEditCommand('my_layout', $recordId);
$editQuery->setField('Status', $newStatus);
$editResult = $editQuery->execute();