我在浏览器中运行了一个脚本,它在数据库中插入了大约100000条记录。出于某种原因,我删除了我编写脚本的文件,但对我来说,即使脚本不存在,脚本仍然会在数据库中插入记录也就不足为奇了。那是为什么?
答案 0 :(得分:4)
该过程正在内存中执行 而不是从磁盘执行。
如果您希望停止正在运行的脚本,则需要重新启动Web服务器,或者终止php进程。取决于它是否从命令行运行。
答案 1 :(得分:2)
向Web服务器发出请求时:
PHP文件被加载到内存中,它被编译并正在运行。
由于文件在内存中,因此对磁盘上文件的任何更改都不适用于运行文件。
如果这引起了另一个问题,那么“为什么它会被加载到内存中?为什么不能直接从磁盘执行?”:
这里的内存主要是RAM,这样做读/写速度更快,需要与处理器速度竞争。
HardDisk是一个缓慢的内存,因此从它进行访问会使你的程序执行起来很慢。
为了与处理器速度相匹配,需要将一个可执行文件从慢速内存(通常是HardDisks)加载到更快的内存(通常是Ram或处理器的缓存)。
因此,原因和答案就是为什么磁盘上的文件不在内存中的同步文件中。
另外请放心,这可以在您的下一个请求中正常工作!!
但如果您仍想立即执行此操作,则可以考虑停止/重新启动Apache / IIS(适用于哪个)服务器,因为这会立即终止该进程。
答案 2 :(得分:0)
@Umair一旦你运行脚本然后请求转到服务器,它将在服务器上运行,直到过程完成。因此,无论文件是否可用都无关紧要,因为正在处理的旧请求正是这种情况发生的原因。