0

我有一个测试系统,可以记录用户输入的答案,然后对测试进行评分。完成后,它会创建一个易于阅读的答案表和用户获得的分数。我想记录该文件并将其放入日志文件中。

因此,我使用用户的用户名设置了一个文件,并将所有测试结果记录在该文件中。问题是,这些文件对公众开放。我有一个登录系统,它检查会话 ID 并允许或不允许访问,但我无法将代码放入那些新生成的文件中。

那么我应该怎么做呢?我已经使用该.htaccess文件来阻止对该文件夹的访问,但我希望有一个更流畅的解决方案。

是否可以使用 PHP 将 PHP 代码动态写入新创建的文件?(因此它会自动将登录检查生成到其每个自动生成的日志文件中)

提前感谢您的所有帮助。

4

4 回答 4

1

将文件保存在 Web 根目录之外。任何外部的public_html(或任何您的 Web 根目录)都完全无法从 Web 访问,但可以通过 PHP 文件访问,例如,如果它看到您已登录。

于 2012-10-22T21:27:51.187 回答
0

是否可以使用 PHP 将 PHP 代码动态写入新创建的文件?(因此它会自动将登录检查生成到其每个自动生成的日志文件中)

是的。您可以创建一个仅包含登录检查的模板文件 file_get_contents ,然后将其写入文件顶部。然后,使用__halt_compiler()阻止 PHP 解释文件的其余部分。然后,您可以开始阅读__COMPILER_HALT_OFFSET__并将其回显给客户端。

如果您想要一个比使用更简单的解决方案,__halt_compiler()您可以简单地创建一个 php 文件,该文件将在会话检查后将结果回显给用户。

更好的是,您可以将所有结果插入数据库。然后,您只需要一个页面来检查用户名,获取结果,然后将其全部输出给用户。

于 2012-10-22T21:31:38.410 回答
0

在创建表格文件之前,您还可以对该文件进行简单的追加,您将在其中插入表格代码和 PHP 会话检查代码。您可以使用 PHP文件写入函数来做到这一点。

由于 PHP 会话检查代码将保持不变,因此这种方法要容易得多。

于 2012-10-22T21:34:53.463 回答
0

a) 将文件存储在站点文档根目录之外的某个位置,因此无法通过 URL 直接访问它们。

b) 有一个 PHP 脚本作为访问这些文件的网关。代码很像

<?php

$fileID = $_GET['id'];

if (user_is_allowed_access($fileID)) {
    send_file_to_user($fileID);
} else {
    die("go away");
}

一旦你解决了访问/权限检查的问题,文件的实际发送就可以像字面意思一样简单readfile('/path/to/file/on/server')

于 2012-10-22T21:46:31.673 回答