akeeba/phpfinder

在服务器上定位PHP CLI二进制文件

dev-master 2024-10-01 08:29 UTC

This package is auto-updated.

Last update: 2024-10-01 08:29:43 UTC


README

在服务器上定位PHP CLI二进制文件

这是什么?

这个库从网络(Apache mod_php、CGI或FastCGI)执行上下文定位PHP CLI二进制文件。

当前支持的环境包括

  • cPanel与EasyPHP
  • cPanel在CloudLinux上
  • Plesk在Linux和Windows上
  • XAMPP在Linux、Windows或macOS上
  • MAMP在Windows和macOS上
  • HomeBrew在macOS上
  • WAMPServer在Windows上
  • 通用Linux服务器(与Debian、Red Hat、Arch Linux及其衍生版本兼容)
  • 通用BSD服务器
  • 通用Windows服务器,包括C:\PHP中的PHP安装
  • 通用macOS服务器

您可以尝试定位特定版本的PHP(通过major.minor或manjor.minor.patch版本规范),或任何可用的PHP版本。

用例

我们拥有面向非技术终端用户的广泛分布的网络应用程序,旨在安装和运行。

我们经常提供CLI脚本或与这些脚本集成(例如,与Joomla! CLI或WP-CLI集成)。用户需要非常精确的说明来执行这些CLI脚本,无论是直接执行还是作为CRON作业。

这需要两件事:PHP CLI可执行文件的路径以及他们需要执行的脚本路径。后者很容易从网络应用程序中确定。前者则不然。这正是这个库的作用。它试图在服务器上定位PHP CLI二进制文件。

基本用法

您至少可以这样做

$cliPath = \Akeeba\PHPFinder\PHPFinder::make()->getBestPath(PHP_VERSION);

这将尝试定位当前PHP版本的PHP CLI路径。如果失败,将返回NULL。

高级用法

创建并设置一个 Configuration 对象

// Check the source comments of the Configuration class to understand what each setting does.
$configuration = \Akeeba\PHPFinder\Configuration::make()
    ->setExtendedBinaryNameSearch(false)
    ->setSoftwareSpecific(false);

使用配置对象创建一个 PHPFinder 对象

$finder = \Akeeba\PHPFinder\PHPFinder::make($configuration);

搜索任何可用的PHP版本或特定版本

$anyPHP = $finder->getBestPath();
$php83  = $finder->getBestPath('8.3');

您还可以获取给定PHP版本的自动检测到的所有PHP文件夹

$anyPHPArray = $finder->getPossiblePaths();
$php83Array  = $finder->getPossiblePaths('8.3');

注意事项

在某些用例中,搜索特定PHP CLI可能很慢。我们强烈建议在第一次运行后缓存结果。

这个库试图在速度和准确性之间取得平衡。这可能导致返回的PHP路径看似“错误”。我们知道以下情况下可能会发生这种情况

  • 通过主版本和次版本(但没有补丁版本)号搜索PHP版本可能会返回较旧的补丁版本PHP。例如,如果您同时安装了PHP 8.3.1和PHP 8.3.4,并且搜索PHP 8.3,则无法保证返回PHP 8.3.4。
  • 如果系统中有多个相同版本的PHP安装,则无法保证返回的PHP二进制文件属于同一安装。例如,您可能有一个安装了全局PHP但也是XAMPP一部分的Linux服务器。如果您在XAMPP下运行Web脚本并使用此库,可能会返回与XAMPP PHP版本相同的全局PHP CLI版本。
  • 同样,如果您有多个PHP安装,并且没有指定PHP版本,则无法保证返回的路径将是最新版本的PHP或任何特定版本的PHP。它将是服务器上找到的任何 PHP版本。

出于实际原因,仅通过主版本号搜索PHP版本是不支持的。如果您想模拟这种非常低效的搜索,可以按照以下顺序搜索PHP x.6、x.5、x.4、x.3、x.2、x.1和x.0,返回找到的第一个版本。请注意,这可能会非常慢!

大多数服务器都有与用于Web SAPI(mod_php、CGI或FastCGI)的配置不同的PHP CLI配置。这是一个不易察觉的注意事项,需要告知您的用户。在这些环境中,没有一种好方法可以自动化在PHP和Web之间使用相同的配置。