smarty
好的,所以在使用in测试文件上传时,我从 Internet Explorer 收到了这个奇怪的意外响应php
。
这里我的文件上传(view
)的聪明代码,简化为主要问题,对于那些没有使用过activecollab的人来说,Router::assemble
它只是形成一个带有从MVC读取的参数的url。
(来源:iforce.co.nz)
<div id="xero_invoice_manager_api">
{form action=Router::assemble('xero_invoice_manager_api') method=post id="xero_invoice_manager" enctype="multipart/form-data"}
<div class="content_stack_wrapper">
<input type="file" name="file_1" /><br/>
<input type="file" name="file_2" /><br/>
{wrap_buttons}
{submit success_event="api_updated" }Authenticate{/submit}
{/wrap_buttons}
{/form}
</div></div>
这是我的view
.
App.Wireframe.Events.bind('api_event_finished.content', function(event, settings) {
App.Wireframe.Flash.success(App.lang('Xero Invoice Manager has saved/uploaded your Xero API data.'));
});
这是我的简化控制器(我发现问题出在 smarty 而不是 php)。
//api view
function api(){
if ( $this->request->isSubmitted()) {
$this->response->respondWithData(true);
}
}
这是我的控制器与上传发生..
//api view
function api(){
$this->assignSmarty();
if ($this->request->isSubmitted()) {
$this->XeroAuthUpdate(); //update everything
if(isset($_FILES)){
$file_manager = new XeroFileManager();
$file_manager->dumpFiles($_FILES);
//upload the files
foreach($_FILES as $file){
$file_manager->handle_certificate_file($file);
} //foreach add the headers
if(function_exists('headers_list')){
xeroDebugMode("[Controller] the headers to be sent are... ", headers_list());
} //function check
} //end if
$this->response->respondWithData(array(
// constraints
'key_result' => (bool)$this->checkValue(XeroAuths::getSetting('xero_consumer')),
'secret_result' => (bool)$this->checkValue(XeroAuths::getSetting('xero_secret')),
// files secruity certificates
'publickey' => (bool)file_exists(XERO_PUBLIC_KEY_PATH),
'privatekey' => (bool)file_exists(XERO_PRIVATE_KEY_PATH),
'xero_auth' => (bool)validateXeroAuth(),
//login constraints
'install' => !$this->checkInstallRequirements(),
));
} //close the request
}
这是来自 Firefox 的回复,file_1
并且file_2
不是空的。
(来源:iforce.co.nz)
这是来自 Internet Explorer 9 的回复,带有file_1
和file_2
空的(到目前为止一切都很好)。
(来源:iforce.co.nz)
这是来自 Internet Explorer 9的有问题file_1
的响应,其中(即 publickey.cer)和file_2
(即 privatekey.pem)不为空(下载 index.php 吧?)。
(来源:iforce.co.nz)
我对 activecollab 的回应
你好迈克尔,
这么晚才回复很抱歉。
不幸的是,我们无法弄清楚问题出在哪里。看起来一切都写得很好,但如果不处理代码本身,我们几乎无能为力。在 IE 中处理 JSON 响应在 activeCollab 中运行良好(嗯,不是在 IE6 中),因为 aC 3 中的几乎所有内容都基于 JSON,这使您的问题变得具体,并且您的代码中可能有问题。
问候, Oliver Maksimovic activeCollab 开发和支持
一般和售前问题:1-888-422-6260(免费电话) 技术支持:support@activecollab.com
一位同事建议..
建议尝试以下操作:1)打开 IE -> 打开开发工具(按 F12)-> 单击菜单中的“缓存”-> 单击“清除浏览器缓存”...完成后单击“缓存”,然后单击“总是从服务器刷新”。
这迫使 IE 不缓存任何东西,因为我有很多次 IE 缓存 ajax 请求并导致一些非常奇怪的行为。
如果这可以解决您的问题,请告诉我,如果可以,我们可以在您的 ajax 响应中添加一些 php,以强制所有浏览器从不缓存响应。否则,如果仍然不起作用,可能需要在 IE 中进行一些 JS 调试,以查看发送的内容并将其与您的 FF firebug 结果进行比较。
headers_sent()
出现空白
但是headers_list
(就在之前respondWithData
被调用),用于 Internet Explorer。
2012-08-08 06:50:16 the headers sent from this request is... Array
(
[0] => X-Powered-By: PHP/5.3.8
[1] => Set-Cookie: ac_activeCollab_sid_yhRk0xSZku=1%2Fhkykz0Rw0796e4lDykXekNXvhMMxC8pV4akJPMvA%2F2012-08-08+06%3A50%3A15; expires=Wed, 22-Aug-2012 06:50:15 GMT; path=/
[2] => Content-Type: application/json
[3] => Expires: Mon, 26 Jul 1997 05:00:00 GMT
[4] => Cache-Control: no-cache, no-store, must-revalidate
[5] => Pragma: no-cache
)
Raw
来自Fiddler 上的选项卡的响应标头,在 Internet Explorer 上
HTTP/1.1 200 OK
Date: Sat, 11 Aug 2012 08:08:46 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: ac_activeCollab_sid_yhRk0xSZku=11%2Fz8rWxiRchAh8EWinYO2d7a1mmvn2DMKUdse1vfKh%2F2012-08-11+0 8%3A08%3A46; expires=Sat, 25-Aug-2012 08:08:46 GMT; path=/
Content-Length: 107
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
{"key_result":true,"secret_result":true,"publickey":true,"privatekey":true,"xero_auth":true,"install":true}
Raw
来自Firefox 选项卡的响应标头。
HTTP/1.1 200 OK
Date: Sat, 11 Aug 2012 08:13:45 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: ac_activeCollab_sid_yhRk0xSZku=12%2FO40CbXC9Vfa7OVnderlK2MFnvnpkyeckvO0Ab5NQ%2F2012-08-11+08%3A13%3A45; expires=Sat, 25-Aug-2012 08:13:45 GMT; path=/
Content-Length: 107
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
{"key_result":true,"secret_result":true,"publickey":true,"privatekey":true,"xero_auth":true,"install":true}
关于我在 IE 上做错了什么的任何想法?以及为什么 Internet Explorer 通知用户下载index.php
(当字段处于活动状态时)。请记住,服务器端没有实际上传(在初始测试期间,index.php 下载请求与 .php 无关move_uploaded_file
)。