问题描述
我仅在收到$ _POST参数时才尝试使用PHPExcel库下载Excel。
当前,我有一个名为my-information.PHP的文件,其中有一个表和一个执行此功能的按钮:
async function download_excel() {
let myHeaders = new Headers();
myHeaders.append("Cookie","___asdadsadwqfqefqefqeeqasadsadsadasdsadas");
var formdata = new FormData();
formdata.append("generate_xlsx",1);
let requestOptions = {
method: 'GET',headers: myHeaders,body: formdata,redirect: 'follow'
};
await fetch("<?= plugin_dir_url(__FILE__) ?>my-file-generator.PHP",requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(err => console.log(err))
}
在我的my-file-generator.PHP文件中,我有以下代码:
if (isset($_POST) && isset($_POST['generate_xlsx'])) {
require_once '../../../../../wp-blog-header.PHP';
require_once plugin_dir_path(__FILE__) . 'PHPExcel.PHP';
require_once plugin_dir_path(__FILE__) . 'PHPExcel/Writer/Excel2007.PHP';
$data = generate_data_for_xslx();
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setTitle(esc_html__('Test xlsx document','woocommerce'));
$objPHPExcel->getProperties()->setSubject(esc_html__('Test xlsx document','woocommerce'));
$objPHPExcel->getProperties()->setDescription(esc_html__('Test export users document for XLSX,generated using PHP classes.','woocommerce'));
$objPHPExcel->getActiveSheet()->SetCellValue('A1',esc_html__('User Login','woocommerce'));
$cell_counter = 1;
$objPHPExcel->setActiveSheetIndex(0);
for ($i = 0; $i < count($data); $i++) {
$cell_counter++;
$objPHPExcel->getActiveSheet()->SetCellValue('A' . $cell_counter,$data[$i]['user_login']);
}
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle(esc_html__('Users','woocommerce'));
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Type: application/vnd.ms-excel');
header('Content-disposition: attachment;filename="usuarios.xlsx"');
header('Cache-Control: max-age=0');
// Save Excel file
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
ob_end_clean();
$objWriter->save('PHP://output');
exit();
}
这样,该文件将无法运行,也不会下载Excel文档。但是,如果我复制条件文件中的代码并将其粘贴到my-information.PHP文件中,则在打开页面时,它可以完美执行。
我尝试将完整的条件添加到my-information.PHP文件中并获取相同的文件,但是它也不起作用,控制台也给我这个错误。显然问题是使用$ _POST参数来完成的:
XHR POST https://example.com/wp-content/plugins/generateReporte/src/includes/my-file-generator.PHP [HTTP/1.1 404 Not Found 7578ms]
PK��������z%jQG�D�X�����������[Content_Types].xml��MN�0����"��%nY ��vAa �(�0����ؖg�w{&i���@�nbE�{��y��d۸l
m��������X�(���)�����F���;@1�_������c)j�x/%����E��y�
�QĿi!��K��y3��J�<���Z�1��0?Y��L%zV
c��Ib7�������a/l٥P1:��q�r���j���j0A������u�"��"����(� �����W�M��)Tj�({ܲ�>���O���,X٭���>B��~����Ӥ6�J=�oBZ����t��X4���Cg�,���Qg��mr�L����ٯc�e��t�� Z�?����hPv��±���u�j���R������}�Cv����PK��������z%jQ��78����K�������_rels/.rels���j�0���{
�{���1F�^ʠ�2���l�$���-}�y�����Î��O��v�y��;�؋Ӱ.JP���^������Y�ű�3G�Ww�g�)���>��qQC���D���b!�]�i$L��3�����2n����o�T��:Z
�h����[��4�ი��]���yN�,ە��>�>��j
-'
V�)�#��EF�^6��n���8q"K��H��>_�ׄ����eƏ�<⇄�Ud�v��
T�PK��������z%jQ�$�V������������xl/_rels/workbook.xml.rels���j�0�D��
��ZvZJ)�s)�\[�����LlIh7m��U�H�����Ĭؙ�H���8�OL����*J��M����|4��g���[=��
&$��w�7�4��r}$�M<)p��EJ2�GME���M�Ҩ9��ɨ�^w(We�$�����O��
仅在单击按钮时,我才需要生成和下载文件,我已经尝试了很多方法,但我做不到,请您帮我。
解决方法
使用这一行:
if (isset($_POST) && isset($_POST['generate_xlsx'])) {
您只是在检查该字段是否存在。要检查是否已被点击,请尝试将其替换为以下内容:
if ( isset( $_POST['generate_xlsx'] ) && $_POST['generate_xlsx'] == 'yes' ) {