Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取一个php进程(使用php)的结果,该进程包括一个die命令_Php_File_Include_Return_Die - Fatal编程技术网

获取一个php进程(使用php)的结果,该进程包括一个die命令

获取一个php进程(使用php)的结果,该进程包括一个die命令,php,file,include,return,die,Php,File,Include,Return,Die,初稿 我正在使用php为我正在进行的项目编写一个自定义文件服务工具。到目前为止,这个工具工作得很好,但我在提供php文件时遇到了一个奇怪的情况 我的初始文件server.php旨在接受文件请求,并使用正确的头文件和缓存控件等为文件提供服务 php使用file命令获取平面文件(如图像)的内容,并以echo打印方式提供这些内容 php目前使用include(带输出缓冲)获取要提供服务的php文件的内容。在include文件包含die命令之前,这种方法一直有效 我已经尝试使用return而不是die来

初稿

我正在使用php为我正在进行的项目编写一个自定义文件服务工具。到目前为止,这个工具工作得很好,但我在提供php文件时遇到了一个奇怪的情况

我的初始文件server.php旨在接受文件请求,并使用正确的头文件和缓存控件等为文件提供服务

php使用file命令获取平面文件(如图像)的内容,并以echo打印方式提供这些内容

php目前使用include(带输出缓冲)获取要提供服务的php文件的内容。在include文件包含die命令之前,这种方法一直有效

我已经尝试使用return而不是die来终止这个过程。但如果包含的文件包含更多文件,则无法执行模具作业


简而言之,我有一个PHP文件“server.PHP”,其中包括另一个PHP文件。我希望将其处理后的输出作为一个独立的平面文件。我不关心变量被移动到全局范围,我只想要输出。有什么想法吗

谢谢各位


编辑

server.php

<?php
echo 'File start'."<br>\n";
        ob_start();
        include("file.php");
echo    ob_get_clean();
echo 'File end'."<br>\n";
?>

file.php

<?php
echo 'I am expecting to get this data.'."<br>\n";
die;
echo 'I am not expecting to get this data.'."<br>\n";
?>

我希望得到大致类似的结果。

文件开始
我希望得到这些数据。
文件结束

我得到的结果看起来是这样的。

文件开始
我希望得到这些数据。


如果使用return而不是die,则会得到预期的结果。但这并不能阻止人们使用die和破坏我的程序。希望我的编辑能更好地解释这个问题。再次为大家干杯。

使用
include
将运行当前进程中的其他文件。要在另一个进程中运行它们,可以使用
exec
,或
proc.*
函数,也可以使用forking

使用哪一个完全取决于您的需求

编辑

要使用
exec
函数运行php脚本,请尝试以下方法

exec("php $absolutePathToScript", $output, $result);

if ($result !== 0) { //the script did not throw an error
    print_r($output) // will show the output of the command
}

只是用来获取PHP文件的内容,因为include和require将执行包含文件中的PHP代码,而不会太愚蠢,我浏览了上面的链接,它们似乎超出了我的能力。我的命令行知识很差。它们是获取流程结果的更直接的方法吗?从我对您的描述中可以看出,这不是“获取流程结果”->您目前实际上并没有创建另一个流程,只是在当前流程中运行其他代码。我可以试着在我的回答中给出一个使用exec运行php文件的例子。你是对的,我不清楚。。。我很高兴将其纳入当前流程,而不是开始另一个流程。但是我想把“这一部分过程的结果”作为一个字符串打印出来。你是说你正在运行其他人的代码,其中可能有或可能没有调用
die
,而你对此没有控制权?这听起来是个非常糟糕的主意。你这么做是为了什么?我理解你的意思,并不是说我在运行别人的代码。但运行的代码肯定会包含一个骰子。如果我能让它工作,我最终可以运行其他人的代码。实际上,我使用server.php作为管理web服务器文件请求的实验。我有一个简单的htaccess规则,可以将所有请求转发到server.php。目前,我已经编写了一个类来模拟文件定位系统和url重写引擎。一旦处理,就会尝试为文件提供服务。这目前运行得很好,目前确实使用include和output缓冲来解析php网页。但是,如果所述页面包含一个骰子,则记录有效负载的程序的剩余部分将停止运行。那么,问题是该页面包含一个
die
。在谷歌上快速搜索一下为什么
die
不好可以给出很多原因。然而,主要的一点是,它是控制代码流的一种糟糕而懒惰的方式。如果出了什么问题,你真的应该
去死
——在这种情况下,你真的应该支持抛出一个异常,因为这是可以处理的。谢谢你的建议和诚实,到目前为止,你已经做到了。此时,请求用一个骰子解析一个php,只需将记录的有效负载作为“提前终止”。当我抛出一个错误时,这是一样的,除非它是一个非破坏性的错误。但再次感谢你,我可能不得不考虑“提前终止”。