从外部网站访问页面时PHP执行不正确



我有一个客户端,它使用的网站生成器无法编辑代码或访问数据库,但希望跟踪文件的下载情况。

我设置了一个系统,在这个系统中,我在其他地方托管文件,他们的网站上有一个指向托管网站上一个页面的<a>链接,其中有一个非常简单的脚本,可以插入一个记录来跟踪下载以及下载文件。

这是我的网站download-agreement.php:页面中的php脚本

<?php
$db = new mysqli('localhost', 'username', 'password', 'database');
if ($db->connect_error) {
die("Connection failed: " . $db->connect_error);
}
$file_path = 'agreement.pdf';
$stmt = $db->prepare("INSERT INTO `download_log` (`date`) VALUES (CURRENT_TIMESTAMP())");
if ($stmt===false) {
error_log($db->error);
}
$result = $stmt->execute();
if ($result===false) {
error_log($stmt->error);
}
$stmt->close();
$db->close();
error_log("Downloaded: " . date("Y-m-d H:i:s"));
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename=agreement.pdf'); 
readfile($file_path);
?>

我在他们的网站上放了一个链接:

https://www.host.com/theirdirectory/download-agreement.php

如果链接是直接访问的,那么它工作正常——执行error_log()并插入记录。

如果链接是在他们的网站上点击后访问的,则只有文件下载。不执行error_log()并且不插入记录。

我有点不知所措,因为我甚至都不会出错。如果您有想法或想法,我们将不胜感激。

编辑

这似乎是Chrome桌面版的一个问题(没有任何意义(。这在所有浏览器上都能正常工作,除了桌面版Chrome(它在移动版Chrome上工作(,在多台计算机上禁用缓存的所有浏览器上进行了测试。

感谢大家的帮助,问题出在"GoDaddy网站建设者"在存储链接的客户网站上。

我仍然不确定到底是什么问题,但我的解决方案是让这项工作发挥作用。我必须使用HTML部分,它允许我手动将链接作为HTML代码块写入-它恰好在它们的生成器中呈现为iframe,与其他预建元素(如带链接的按钮等(不同。看起来可能有一些缓存发生在它们的一端(正如esqew提到的那样(,或者这些元素在不同的浏览器中表现不同,在幕后发生了一些事情。

最新更新