【发布时间】:2016-04-26 06:44:04
【问题描述】:
我在php中有这个函数用于下载文件,文件会被数据加密,然后被下载
类:Connect 只是连接到数据库
class License extends Connect {
function __construct() {
parent::__construct();
}
public function getLicense($vars){
// file_put_contents( "/var/log/datapost/clientinfo.log", date('r'). " ". var_export($vars,true) . PHP_EOL, FILE_APPEND );
$sql = "select * from License where license_id={$vars->data->license_id}";
$res = $vars->db->query( $sql );
if($obj=$res->fetch_object()){
$filename = "License".$vars->data->license_id.".json";
// get the private key
$pk = file_get_contents("/var/www/datapost/clientinfo/keys/key1.pem");
// // private key
$res = openssl_get_privatekey($pk,"passsword");
// // encrypt it
$x=openssl_private_encrypt( json_encode($obj),$crypttext,$res);
// save the encryption
//
file_put_contents("/var/www/datapost/clientinfo/license/license{$vars->data->license_id}}.json",$crypttext);
// header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="' . $filename . '"');
// header('Expires: 0');
// header('Cache-Control: must-revalidate');
// header('Pragma: public');
// header('Content-Length: ' . strlen($crypttext));
echo $crypttext;
file_put_contents("/var/log/datapost/{$filename}", $crypttext, fopen("http://192.168.200.114/var/log/datapost/{$filename}", 'r' ));
flush();
file_put_contents( "/var/log/datapost/clientinfo.log", date('r'). " WOOHOO! $crypttext" . PHP_EOL, FILE_APPEND );
}
else {
file_put_contents( "/var/log/datapost/clientinfo.log", date('r'). " AAARG SHIT ".var_export($res,true) . PHP_EOL, FILE_APPEND );
}
}
}
但由于某种原因它无法正常工作,数据是在 http 请求中发送的,但没有与数据一起下载文件,感谢任何帮助
这是 extjs 应用程序中的 ajax 请求,(点击按钮)
onButtonClick7: function(button, e, eOpts) {
Ext.Ajax.request({
url: 'system/index.php',
method: 'POST',
params: {
class: 'License',
method: 'getLicense',
data: Ext.encode({
license_id: Ext.getCmp('overviewGrid').selection.data.license_id
})
},
success: function( response ){
var object = Ext.decode( response.responseText, true );
//Ext.getStore('LicenseAllStore').reload();
// window.open('http://192.168.200.114/datapost/clientinfo/license/BLAH_BLAGH3.json');
},
failure: function( response ){
var object = Ext.decode( response.responseText, true );
Ext.MessageBox.alert( 'Status', object.message );
}
});
},
【问题讨论】:
-
你确认它实际上进入了 if 块吗?在其中放置一个 var_dump 或使用调试器单步执行代码。
-
是的,我看到了请求的响应,'echo $crypttext'
-
有网络请求,但没有下载文件
-
是的,请验证请求是否真正触发了输出标头的 if 块。您对响应感兴趣,而不是请求。
-
是的,我的意思是看到实际的加密文本响应
标签: php json extjs http-headers