Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';迁移后不执行批处理操作_Php_Json_Parse Platform_Parse Server - Fatal编程技术网

Php Can';迁移后不执行批处理操作

Php Can';迁移后不执行批处理操作,php,json,parse-platform,parse-server,Php,Json,Parse Platform,Parse Server,我最近完成了将我的Parse PHP应用程序迁移到Google云托管的解析服务器的工作。从那时起,像ParseObject::saveAll(),ParseObject::destroyAll()等批处理操作在大多数情况下开始失败。我正在考虑在GitHub上报告这个bug,但我想确保它不仅仅是我的实例 我甚至无法复制: 这段代码和我的应用程序对批处理操作的使用都会在PHP上引发以下类型的异常(在本例中,错误由saveAll引发): 未捕获异常“Parse\ParseException”,消息为“

我最近完成了将我的Parse PHP应用程序迁移到Google云托管的解析服务器的工作。从那时起,像
ParseObject::saveAll()
ParseObject::destroyAll()
等批处理操作在大多数情况下开始失败。我正在考虑在GitHub上报告这个bug,但我想确保它不仅仅是我的实例

我甚至无法复制:

这段代码和我的应用程序对批处理操作的使用都会在PHP上引发以下类型的异常(在本例中,错误由saveAll引发):

未捕获异常“Parse\ParseException”,消息为“无法路由批处理路径/1/classes/TestObject”

调试表明Parse服务器返回错误代码107,根据这意味着无效的JSON。我不熟悉RESTAPI,但在本例中,发送的数据是

{“请求”:[{“方法”:“POST”,“路径”:“/1/classes/TestObject”,“body”:[]},{“方法”:“POST”,“路径”:“/1/classes/TestObject”,“body”:[]},{“方法”:“POST”,“路径”:“/1/classes/TestObject”,“body”:[]}

这是有效的JSON


批处理操作在迁移之前工作正常。PHP版本是5.6。感谢您的帮助。如果错误可以重现,我将在GitHub上创建一个问题。

解决方案是编写
/parse/classes/ClassName
,而不是
/1/classes/ClassName
。因此,在迁移之后,位于的文档中所述的详细信息已经过时


!!!这在将来可能会改变!!!请注意这个问题:

以防有人还在寻找这个问题,下面是github发布的解决方案

我更深入地研究了一下。事实证明,服务器对它接收的批处理请求的URL进行了一些剥离。具体来说,它会检查您的api前缀(在大多数情况下为
/parse
)是否与发送的内容匹配。对于批处理请求,单个请求不包含此内容,它们最终会导致匹配失败。通过测试你上面的代码,我可以修补它。它是有效的,但我可能会看看我是否能在将来写一个更好的补丁

当前,您需要在两个位置将api前缀作为
/your_prefix/
(在大多数情况下,这也是
/parse
,但使用您为服务器设置的前缀)进行批量保存和删除,如下所示

ParseObject.php
私有静态函数deepSave($target,$useMasterKey=false)
(与/1/前面的位置相同)

foreach($requests as&$r){
$r['path']='/parse/'.$r['path'];
}
ParseObject.php
私有静态函数destroyBatch(数组$objects,$useMasterKey=false)

foreach($objects作为$object){
$data[]=[
'方法'=>'删除',
'path'=>'/parse/classes/'.$object->getClassName()./'.$object->getObjectId(),
];
}

随着这两个点的改变,我能够得到批量保存和删除正常运行。我还观察到了您之前遇到的相同问题,只是为了确认。

尝试删除“/1”@xissburg谢谢您的回复,但这没有什么区别。我同时删除了“/1”和“/1/”,错误相同。我很困惑到底是什么原因导致了这个错误。如果你写信给我,而不是一般的听众,我自己打开了这个问题,答案就从那里出来了;虽然我已经有一段时间没有查看问题页面了,而且看起来其他人也在使用相同的解决方案。谢谢你提醒我,我以前应该亲自回答的。
...
$o1 = ParseObject::create('TestObject');
$o2 = ParseObject::create('TestObject');
$o3 = ParseObject::create('TestObject');
ParseObject::saveAll([$o1, $o2, $o3]);
ParseObject::destroyAll([$o1, $o2, $o3]);
...