分类 php 下的文章

由于FcgidInitialEnv不能配置在directory中

可以使用FCGIWrapper属性实现变量

不设置PHPRC环境变量,php会自动加载php-cgi.exe所在目录中的php.ini配置文件,只要把对应版本的php.ini配置文件放到对应的php-cgi.exe所在目录即可。

你那种方式无法实现,fcgid文档里面早有相关说明,引用如下,可供参考。

  • 某些依赖于虚拟主机的设置或其他概念,例如 FcgidInitialEnv 或进程类,仅当它们具有不同的服务器名称时才能区分虚拟主机。 在 FcgidInitialEnv 的情况下,如果两个虚拟主机具有相同的服务器名称但不同的环境作为由 FcgidInitialEnv 定义,用于特定请求的环境将是为导致 FastCGI 进程启动的请求的虚拟主机定义的环境。

相关文章
https://segmentfault.com/q/1010000009744399

Apache httpd 不将 PHP 作为 mod_php 加载,Apache http server 通过 mod_fcgid 将 PHP 作为 FastCgi 程序运行,可以实现多个版本的 PHP 同时运行,甚至还可以为一个网站的不同目录运行多个版本的PHP.

FcgidWrapper "path/to/bin/php/7.3/php-cgi.exe" .php
FcgidInitialEnv PHPRC "path/to/php/7.3/"

FcgidWrapper 指令的第一个参数用来指定 php-cgi.exe 的路径和参数,其中的参数可以省略。如果 FcgidWrapper 指定的 php-cgi.exe 路径或者运行 php-cgi.exe 的命令行参数包含空格,必须将对应的值放在引号里面,引号可以嵌套。由于反斜杠在apache配置文件、shell等多种环境中都是转义符,要想将\作为字符传递,需要多次转义,当指定的值是路径时,这所以使用/代表路径中的\,也是因为\是转义符,如果转义不当,会导致配置的值为预期的结果不一样。

FcgidWrapper '"C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe" -d disable_function="chgrp,chown,exec,shell_exec,system"' .php


FcgidWrapper '"C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe" -d open_basedir="\'C:/Program Files/wuxiancheng.cn/server/www/\'"' .php
FcgidWrapper "'C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe' -d open_basedir=\\\\"'C:/Program Files/wuxiancheng.cn/server/www/'\\\\"" .php

FcgidInitialEnv PHPRC 用来指定运行 PHP 时的 php.ini 配置文件所在的文件夹路径,以及其他需要传递组 php-cgi.exe 的环境变量。

使用 FcgidWrapper 指令为每个 VirtualHost 配置不同的 FAST CGI 程序, 即 php-cgi.exe ,即可实现一个 apache httpd 服务器同时运行多个版本的 PHP. 还可以使用 FcgidInitialEnv PHPRC 设置不同的 php.ini 配置文件.

想要为不同的虚拟主机配置不同的 php.ini 配置文件,除了 FcgidInitialEnv PHPRC 指定 php.ini 所在目录以外,还可以通过为 php-cgi.exe 添加 -c 命令行参数实现,-c 后面的参数值可以是 php.ini 的路径,也可以是 php.ini 所在文件夹的路径,建议使用绝对路径避免出现找不到文件的情况。php 配置文件的文件名可以不是 php.ini,可以是任意文件名,比如 php.conf.

FcgidWrapper '"C:/Program Files/wuxiancheng.cn/php/7.3/php-cgi.exe" -c "C:/Program Files/wuxiancheng.cn/php/7.3/php.ini" -d display_errors=On' .php

php.exe 和 php-cgi.exe 命令行参数 -d 用来配置 PHP 的配置参数,此处配置的值会替换掉 php.ini 配置文件中相同参数的值。
php-cgi.exe 的其他命令行参数,可以在命令行窗口中运行 php-cgi.exe -help 查看。

相关文章
https://www.51-n.com/t-4615-1-1.html

首先检查您的PHP是线程安全性的还是非安全性的,因为我们需要知道要下载正确的模块。你可以在Windows中运行一个简单的命令来检查这个。代码如下:

php -i | findstr "Thread"

如果结果输出是Thread Safety => enabled,那说明你的PHP版本是线程安全性的,反之亦然。
当然你也可以新建个PHP文件,用php_info();来获取你PHP的信息。

接下来,在Jan-E这里下载完整的编译好的PHP版本:
https://www.apachelounge.com/viewtopic.php?t=6359
然后你可以从里面提取出你需要的文件,将它们解压到各自的文件夹中:
\php\ 文件夹:

  • v8.dll
  • v8_libbase.dll
  • v8_libplatform.dll
  • icui18n.dll (php7)
  • icuuc.dll (php7)

\php\ext\文件夹:

  • php_v8js.dll

还有最后一步,配置你的php.ini文件:

; V8 Javascript Engine Module
extension=php_v8js.dll

最后重启你的服务就可以了!!!

提供个简单的例子:

<?php

$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT

var string1 = 'Hello' + ' ' + 'World!';
len = print(string1+"\\n");
var string2 = 'Hello' + ' ' + 'World2!';
len2 = print(string2+"\\n");
string1+","+string2;
EOT;

try {
  $temp = $v8->executeString($JS, 'basic.js');
  $temp = explode(",",$temp);
  print_r($temp);
} catch (V8JsException $e) {
  print_r($e);
}

运行结果如下:

[Running] php "e:worktest.php"
Hello World!
Hello World2!
Array
(

[0] => Hello World!
[1] => Hello World2!
)

[Done] exited with code=0 in 0.622 seconds
按照上面的方法设置后在windows + iis + php 环境可用。
如果使用的是apache,则需要把复制到\php\同目录下的几个文件复制到apache\bin目录下才行。