gpt4 book ai didi

php - 使用 MySQL INTO OUTFILE 不写入 tmp

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:14 26 4
gpt4 key购买 nike

我最近将一个项目移动到实时 VM 实例,它在我的 macOS 机器上使用 XAMPP 进行开发和测试期间运行完美。本质上,网络应用程序有 3 个导出选项:XML、PDF 和 CSV。 XML 工作正常,它是使用 SELECT 语句创建的,然后循环遍历结果并将其推送到 XML 文件中。

但是对于 CSV 和 PDF 导出(PDF 使用 TCPDF)我使用了:

CSV

INTO OUTFILE '/tmp/$department_name+feedback+$timestamp.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'";

PDF

INTO OUTFILE '/tmp/$department_name+feedback+$timestamp.txt' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";

但是文件永远不会写入/tmp。我认为这是一个权限问题,但是该目录归 root 所有,并且具有预期的所有必要权限。

工作的XML代码如下:

$fileLocation = '/tmp/' . $location_name . '+feedback+' . $timestamp . '+.xml';

$sql = "SELECT CONCAT (e.name,' ', e.surname) AS Fullname, f.score AS Score, d.department_name AS Department, f.feedback AS Feedback
FROM employee AS e
JOIN feedback AS f
ON e.qr_id = f.qr_id
JOIN departments as d
ON e.department_id = d.department_id
JOIN location AS l
ON e.location_id = l.location_id
AND e.location_id = '$location'
AND e.company_id = '$company_id'
AND f.`report_Time` BETWEEN SUBDATE(CURDATE(),
INTERVAL 1 MONTH) AND NOW()
ORDER BY f.score DESC";


$xml = new XMLWriter();

$xml->openURI($fileLocation);
$xml->startDocument();
$xml->setIndent(true);

$xml->startElement('feedback');

foreach ($mysqli->query($sql) as $row){
$xml->startElement("Fullname");
$xml->writeRaw($row['Fullname']);
$xml->startElement("Score");
$xml->writeRaw($row['Score']);
$xml->startElement("Feedback");
$xml->writeRaw($row['Feedback']);
$xml->startElement("Department");
$xml->writeRaw($row['Department']);

$xml->endElement();
}

$xml->endElement();

header('Content-type: text/xml');
$xml->flush();


$file_url = $fileLocation;
header('Content-Type: application/xml');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);

所以我不确定为什么 XML 在写入/tmp 目录时有效,而 PDF 和 CSV 却没有,这是在 Google Cloud Platform VM 实例上运行的。正如我之前所说,CSV 和 PDF 导出在我的 macOS 机器上运行良好。

最佳答案

显示结果:

SHOW VARIABLES LIKE 'secure_file_priv';

如果Result不为NULL只能在该目录下写入。

关于php - 使用 MySQL INTO OUTFILE 不写入 tmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43008764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com