完整文件传输后PHP执行函数

完整文件传输后PHP执行函数,php,file,buffer,Php,File,Buffer,我正在编写一个下载计数器,我想知道是否有可能在服务器完全发送缓冲区(这里是与readfile一起发送的文件)并由客户端接收后执行代码。请注意,我不能使用任何客户端语言,因为我直接传输文件(不使用XHR或/和文件系统javascript API) 这在任何方面都可行吗 谢谢 如果是用户正在下载的文件,我想你不能echo任何东西。我刚测试过。系统将提示该文件,该文件将完成,并且未向浏览器打印任何内容。需要注意的是,这可能取决于浏览器 但是,如果您尝试将记录插入/更新到数据库或保存日志文件,则它会起作

我正在编写一个下载计数器,我想知道是否有可能在服务器完全发送缓冲区(这里是与readfile一起发送的文件)并由客户端接收后执行代码。请注意,我不能使用任何客户端语言,因为我直接传输文件(不使用XHR或/和文件系统javascript API)

这在任何方面都可行吗


谢谢

如果是用户正在下载的文件,我想你不能
echo
任何东西。我刚测试过。系统将提示该文件,该文件将完成,并且未向浏览器打印任何内容。需要注意的是,这可能取决于浏览器

但是,如果您尝试将记录插入/更新到数据库或保存日志文件,则它会起作用


所以,我想说,你可以,你不能。

如果它是一个由用户下载的文件,我想你不能
echo
任何东西。我刚测试过。系统将提示该文件,该文件将完成,并且未向浏览器打印任何内容。需要注意的是,这可能取决于浏览器

但是,如果您尝试将记录插入/更新到数据库或保存日志文件,则它会起作用

所以,我想说,你可以,你不能

可以在服务器完全发送缓冲区(这里是与readfile一起发送的文件)后执行代码

是的

<?php
readfile($_GET['i_am_so_vuln']);
print "whoops!";

可以在服务器完全发送缓冲区(这里是与readfile一起发送的文件)后执行代码

是的

<?php
readfile($_GET['i_am_so_vuln']);
print "whoops!";

这里PHP是充当服务器还是客户端?我还记得PHP是服务器端语言吗?不是客户端的。@gravgun实际上,它不是用作客户端的,但是如果您愿意,您可以。这取决于如何将PHP传送到客户端。如果使用解释器,那么可以在客户端上运行PHP代码。但是,如果客户端必须向服务器发送代码,然后服务器解析并执行代码,那么就会出现一个巨大的安全问题。我相信他想知道文件是由服务器下载还是由用户/浏览器下载。这里是PHP充当服务器还是客户端?我还记得PHP是服务器端语言吗?不是客户端的。@gravgun实际上,它不是用作客户端的,但是如果您愿意,您可以。这取决于如何将PHP传送到客户端。如果使用解释器,那么可以在客户端上运行PHP代码。但是,如果客户端必须向服务器发送代码,然后服务器解析并执行代码,那么就会出现一个巨大的安全问题。我相信他想知道文件是由服务器下载还是由用户/浏览器下载。首先,感谢您的回答。是的,我不能
echo
任何东西,因为它的内容将包含在文件中。另外,正如你所说,我正在更新一个MySQL记录;但是我想在客户端完全下载文件后更新它,否则只需单击并取消文件传输,下载计数就会增加1。将文件读取到缓冲区,当文件准备好后,发送到客户端并更新数据库。这会减慢下载速度,如果两个或多个客户端试图访问同一个文件,则在第一个PHP进程读取该文件时,它们将处于暂停状态。首先,感谢您的回答。是的,我不能
echo
任何东西,因为它的内容将包含在文件中。另外,正如你所说,我正在更新一个MySQL记录;但是我想在客户端完全下载文件后更新它,否则只需单击并取消文件传输,下载计数就会增加1。将文件读取到缓冲区,当文件准备好后,发送到客户端并更新数据库。这将减慢下载速度,如果两个或多个客户端试图访问同一个文件,则在第一个PHP进程读取该文件时,它们将处于暂停状态。你说得对。。。除了直接与HTTP服务器(Apache,这在我的托管服务上是不可行的)交互之外,在完整的文件传输之后似乎不可能运行代码(我还想到了那些使用多个连接的“下载加速器”)。无论如何谢谢你!你说得对。。。除了直接与HTTP服务器(Apache,这在我的托管服务上是不可行的)交互之外,在完整的文件传输之后似乎不可能运行代码(我还想到了那些使用多个连接的“下载加速器”)。无论如何谢谢你!