- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我会使用以下代码:
$SERVER_PATH = dirname(__FILE__);
shell_exec($PHP_LOCATION.' '.$SERVER_PATH."/script.php?k1=v1&k2=v2 > /dev/null 2>/dev/null &");
地点:
$PHP_LOCATION
应该包含 PHP 的路径,
$SERVER_PATH
- 是当前工作目录(幸运的是要运行的脚本在同一目录中),
>/dev/null 2>/dev/null &
添加以使此调用异步(取自 Asynchronous shell exec in PHP 问题)
这段代码有两个问题:
据我所知,?k1=v1&k2=v2
仅适用于网络调用,因此在这种特殊情况下,参数不会传递给脚本。
我真的不知道如何初始化 $PHP_LOCATION
变量以灵活地在大多数主机上工作。
我对这两个问题进行了一些研究:
解决1 suggested使用 -- 'parameters_string'
但也建议修改脚本以解析看起来有点笨拙的参数字符串。有更好的解决方案吗?
为了解决2,我找到了一个solution使用 PHP_BINARY
但这是 PHP 5.4+ 案例(我使用的是 5.3)。但是原来的问题是要运行与原始脚本版本相同版本的PHP。那么对我来说(因为我只使用 PHP 5.3)可能有解决方案吗?
编辑 0
让我解释一下为什么我坚持使用这种奇怪的(对于 PHP)方法:
那些 PHP 脚本应该彼此分开:
其中一个将分析数据并
第二个将生成 PNG 图作为最终结果。
这些脚本并非旨在同时运行,这意味着第二个脚本可以按照自己的时间表运行,只需要在其数据准备好(由第一个脚本完成)时运行。因此不应将数据从第二个脚本(子)传递回第一个(父)。
编辑 1
从大多数评论来看,主要讨论都朝着 fork 方向发展。但是,我想强调一下原始问题中提出的 1 和 2 点。我有一些理由按照我指出的方式解决任务,我试图指出所有这些理由。如果我的某些观点看起来很奇怪,请发表评论 - 我会把它说得更清楚,否则我会更改主要问题。
提前致谢!
最佳答案
假设您使用的是 Linux,您可以使用:
function getBinaryRunner($binary)
{
return trim(shell_exec('which '.$binary));
}
例如,同样可以用来检查是否安装了需要的东西:
function checkIfCommandExists($command)
{
$result = shell_exec('which '.$command);
return !empty($result);
}
几点:
escapeshellarg()
和公司通过文件系统路径执行 shell_exec()
您正在访问文件,显然,所有“GET”参数都只是文件名的一部分,它不再是“URI”没有网络服务器来处理它。所以你有两个选择:
通过访问您的网络服务器调用调用。所以它会像:
//Yes, you will use wget or, better, curl to make web-request from CLI
shell_exec('wget http://your.web-server.domain/script.php?foo=bar');
这里的缺点:如果您将通过公共(public) DNS 访问您的网络服务器,它将导致网络中断和所有处理开销。好处 - 显然,您不必在脚本中期望任何其他内容,并且不区分 CLI 和非 CLI 调用
使用 $_SERVER
数组中的数组并传递 CLI 应有的参数:
shell_exec('/usr/bin/php /path/to/script.php foo bar');
//inside your script.php you will see:
//$_SERVER['argv'][0] is "script.php"
//$_SERVER['argv'][1] is "foo"
//$_SERVER['argv'][2] is "bar"
是的,这将需要修改脚本,并且可能需要一些关于如何映射“常规”网络请求和 CLI 请求的逻辑。我什至建议考虑将与 CLI 相关的内容分离到不同的脚本包中,以免弄乱该逻辑。
当您执行 php script.php &
时,您只是在后台模式下运行它。但是,这仍然会为您的流程保持父子关系。这意味着 - 如果父进程死亡,它的子进程也将被删除。准确地说,SIGHUP
将被触发,为避免这种情况,您应该使用 nohup
命令。它将允许模拟进程的“分离”,因此使其运行可靠且独立于父进程发生的情况。
关于php - 从 PHP 脚本运行 PHP 脚本的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31558523/
本文分享自华为云社区《大模型LLM之分布式训练》,作者: 码上开花_Lancer。 随着语言模型参数量和所需训练数据量的急速增长,单个机器上有限的资源已无法满足大语言模型训练的要求。需要设计分布式训
本文分享自华为云社区《五大基础算法--动态规划法》,作者: 大金(内蒙的)。 一、基本概念 动态规划法,和分治法极其相似。区别就是,在求解子问题时,会保存该子问题的解,后面的子问题求解时,可以直接拿来
pip install scp pip install pexpect 测试代码: import os import stat import paramiko # 用于调用scp命令 def s
我目前正在实现“ token ”REST 服务。 token 只是一个字符串,由一些参数构建而成,然后经过哈希处理并在一定时间后过期。 我想在我的 REST 服务中有一个可以验证 token 的端点,
打开软删除后,我在客户端上添加一条记录,推送,删除添加的记录推送,然后尝试使用与初始记录相同的主键添加新记录(然后推送),我得到一个异常(exception)。 EntityDomainManager
打开软删除后,我在客户端上添加一条记录,推送,删除添加的记录推送,然后尝试使用与初始记录相同的主键添加新记录(然后推送),我得到一个异常(exception)。 EntityDomainManager
我有一个应用程序,每 x 秒接收一次天气信息。我想将此数据保存到 XML 文件中。 我应该为每个天气通知创建一个新的 XML 文件,还是将每个通知附加到同一个 XML 文件中?我不确定 XML 标准的
我猜我们大多数人都必须在某个时候处理这个问题,所以我想我会问这个问题。 当您的 BLL 中有很多集合并且您发现自己一遍又一遍地编写相同的旧内联(匿名)谓词时,显然有必要进行封装,但实现封装的最佳方
我有一些 c# 代码已经运行了一段时间了..我不得不说,虽然我了解 OO 原则的基础知识,但显然有不止一种方法可以给猫剥皮(尽管我讨厌那个短语!)。 因此,我有一个基本抽象类作为基本数据服务类,如下所
我设计了一个 SQL 数据库系统(使用 Postgre),我有一个问题,即创建一个关系/引用的常见做法是什么,这种关系/引用即使在引用的对象被删除时也能持续存在。 比如有一个UserORM,还有Act
我们的目标是搜索用户输入的字符串并计算在其中找到多少元音。不幸的是我被困在这里,有什么帮助吗? def numVowels(s): vowels= "AEIOUaeiou" if s
我有一个适用于我的“items”int 数组的旋转函数。下面的代码完成了它,除了我不必要地传输值。我正在努力实现“就地”轮换。我的意思是 ptrs 会递增或递减,而不是从数组中获取值。我需要通过这种方
我有一个 json 存储在我的应用程序文档文件夹中,我需要在我的所有 View 中使用它。我正在加载 json 并将其添加到每个 View 中的 NSMutableArray。但现在我了解到,我可以将
我用 C++ 开始了一个项目。这种语言的内存管理对我来说是新的。 我过去常常使用 new () 创建对象,然后传递指针,虽然它可以工作,但调试起来很痛苦,人们看到代码时会用有趣的眼神看着我。我为它没有
已结束。 这个问题是 off-topic .它目前不接受答案。 想要改进这个问题? Update the question所以它是on-topic堆栈溢出。 关闭 10 年前。 Improve thi
保持类松散耦合是编写易于理解、修改和调试的代码的一个重要方面——我明白这一点。然而,作为一个新手,几乎任何时候我都会超越我所苦苦挣扎的最简单的例子。 我或多或少地了解如何将字符串、整数和简单数据类型封
我发现我需要编写大量重复代码,因为我无法从其他 Controller 调用函数。例如,这里新闻提要内容在我的代码中重复,我对一个 Controller 做一些特定的事情,然后需要像这样加载我的新闻提要
假设需要一种数字数据类型,其允许值在指定范围内。更具体地说,假设要定义一个整数类型,其最小值为0,最大值为5000。这种情况在很多情况下都会出现,例如在对数据库数据类型,XSD数据类型进行建模时。 在
假设我想循环整个数组来访问每个元素。使用 for 循环、for...in 循环或 for...of 循环是 JavaScript 开发人员的标准做法吗? 例如: var myArray = ["app
我有一个旧的 SL4/ria 应用程序,我希望用 Breeze 取代它。我有一个关于内存使用和缓存的问题。我的应用程序加载工作列表(一个典型的用户可以访问大约 1,000 个这些工作)。此外,还有很多
我是一名优秀的程序员,十分优秀!