Compare commits

...

12 Commits

Author SHA1 Message Date
macintoshplus a992318304 fix bug send useragent with new line char 2024-11-13 21:58:01 +01:00
Shivam Mathur 53d62894b7 Fix reading vs16 and newer dependencies in phpsdk_dllmap.php 2024-10-12 19:58:10 +00:00
Christoph M. Becker f0b6aacb6a Update Nginx to 1.26.2 (GH-28)
That is the latest stable version, and certainly progress over Nginx
1.17.6 which has been released almost five years ago.
2024-09-04 12:37:31 +02:00
Christoph M. Becker 1cd2c55d47 Update vswhere to 3.1.7 (GH-18) 2024-09-04 12:35:22 +02:00
Christoph M. Becker afa44a8ac6 Update php.ini for PGO for PHP >= 8.2 (GH-26)
ext/zip is no longer statically compiled as of PHP 8.2.0, but is needed
for several setup tasks; thus we load the shared extension.
2024-09-03 23:02:16 +02:00
Christoph M. Becker dc48bef3a6 Upgrade bundled PHP to 8.3.9 (GH-20)
As of PHP 8.2.0, ext/zip is no longer statically available, but since
it is needed by the PHP SDK (e.g. too unpack the fetched dependencies),
we include the DLL, and load it in php.ini.
2024-08-28 20:39:40 +02:00
Christoph M. Becker 449a2092e0 Remove out-dated fixme comment
The composer version requirement has long been fixed[1], so we can drop
the respective comment also.

[1] <https://github.com/php/php-sdk-binary-tools/commit/8583bb4f008ea5b7ee4b9bc12aee113a8633c8b5>
2024-08-28 19:33:31 +02:00
Christoph M. Becker 4b1dbb58de Add type hints
Some are not as specific as they should be, and some may even be wrong,
but since these are only type hints (not type declarations) they won't
affect code execution, but rather provide some help to better understand
the code – for developers as well as tooling.
2024-08-25 20:12:43 +02:00
Christoph M. Becker a047c663b9 Code clean-up (GH-22)
* Declare methods and instance variables in abstract classes

While PHP doesn't require this, it is good style, and makes the code
easier to reason about.

* Declare class variable

While `Config::getSdkNugetFeedUrl()` is not used from within the
project, and probably just was some experimental stuff, the method is
public, so we better keep it for now, but avoid reading an undeclared
class variable.

* Dodge from covariance warnings regarding Iterator for now

* Don't pass unnecessary arguments

These are retrieved from within the called functions, what *might* not
be the best idea, but it's what we have for now.

* Assert that $cb is actually a string before string conversion

In practice, it's either "copy" or "rename".

* Declare missing `Server::getPhp()`

* Remove unreachable code

* Ensure that `$crt` is defined

From looking at the code, it seems so, but let's make sure before
reading an undefined variable.

* Config::getDepsPort() returns an int

While that is changing the signature of a public method, it makes no
sense to return a string, and later to convert to int again.

* The abstract class TrainingCase is an Interfaces\TrainingCase

There shouldn't be the need for even having an interface (an abstract
class should be sufficient), but we keep the interface for now.
2024-08-25 18:03:45 +02:00
Christoph M. Becker 20d13baab2 Fix #23: Windows permissions incorrect after cloning (#24)
We set executable permissions for all .bat and .exe files.  This is
required for running in Cygwin shells, but generally considered good
style.
2024-08-21 20:53:15 +02:00
Christoph M. Becker 78c9f7b6d7 Fix reading series from cache if fetching fails
`Fetcher::getByUri()` returns a string (and since it is a public method
we don't want to change that for now), but we check for `false`; so we
change that.

We also use `file_exists()` instead of `Cache::isFileCached()` because
the method is actually called `Cache::fileIsCached()` but appears to be
broken due to applying `::getCacheablePath()` again.  Furthermore the
other methods of `Cache` also use `file_exists()` directly.  Since
`Cache::fileIsCached()` is public, we do not remove the otherwise
unused method yet.
2024-08-18 15:34:59 +02:00
Christoph M. Becker 8a4ca6589c Back to dev 2024-07-16 16:36:52 +02:00
113 changed files with 319 additions and 39 deletions
+1 -1
View File
@@ -1 +1 @@
2.3.0 2.3.1-dev
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Regular → Executable
BIN
View File
Binary file not shown.
+1
View File
@@ -5,6 +5,7 @@ extension=php_sqlite3.dll
extension=php_openssl.dll extension=php_openssl.dll
extension=php_mbstring.dll extension=php_mbstring.dll
extension=php_mysqli.dll extension=php_mysqli.dll
extension=php_zip.dll
memory_limit=4G memory_limit=4G
error_reporting=-1 error_reporting=-1
BIN
View File
Binary file not shown.
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
+1 -1
View File
@@ -65,7 +65,7 @@ foreach ($dirs as $path) {
continue; continue;
} }
if (!preg_match(",.*-(vc\d+)-(x\d\d)\.zip,", $filename, $m)) { if (!preg_match(",.*-(v[c|s]\d+)-(x\d\d)\.zip,", $filename, $m)) {
continue; continue;
} }
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
BIN
View File
Binary file not shown.
@@ -8,13 +8,23 @@ class Fetcher
{ {
use FileOps; use FileOps;
/** @var string */
protected $host; protected $host;
protected $port;
protected $stability;
protected $arch;
protected $series;
protected $scheme;
/** @var int */
protected $port;
/** @var ?string */
protected $stability;
/** @var ?string */
protected $arch;
/** @var Series */
protected $series;
/** @var string */
protected $scheme;
public function __construct(string $host, int $port, string $scheme = "https", string $arch = NULL, string $stability = NULL, Series $series = NULL) public function __construct(string $host, int $port, string $scheme = "https", string $arch = NULL, string $stability = NULL, Series $series = NULL)
{/*{{{*/ {/*{{{*/
@@ -8,12 +8,25 @@ class Manager
{ {
use FileOps; use FileOps;
/** @var string */
protected $stability; protected $stability;
/** @var string */
protected $arch; protected $arch;
/** @var string */
protected $path; protected $path;
/** @var Cache */
protected $cache; protected $cache;
/** @var Series */
protected $series; protected $series;
/** @var Fetcher */
protected $fetcher; protected $fetcher;
/** @var ?bool */
protected $updatesFlag = NULL; protected $updatesFlag = NULL;
public function __construct(string $path, string $stability, string $arch) public function __construct(string $path, string $stability, string $arch)
@@ -8,9 +8,16 @@ class Package
{ {
use FileOps; use FileOps;
/** @var string */
protected $name; protected $name;
/** @var Series */
protected $series; protected $series;
/** @var Fetcher */
protected $fetcher; protected $fetcher;
/** @var string */
protected $filepath; protected $filepath;
public function __construct(string $name, Series $series, Fetcher $fetcher) public function __construct(string $name, Series $series, Fetcher $fetcher)
@@ -8,10 +8,19 @@ use SDK\Exception;
class Series class Series
{ {
/** @var ?Fetcher */
protected $fetcher; protected $fetcher;
/** @var string */
protected $stability; protected $stability;
/** @var string */
protected $arch; protected $arch;
/** @var string */
protected $rawData; protected $rawData;
/** @var Cache */
protected $cache; protected $cache;
public function __construct(string $stability, string $arch, Cache $cache, Fetcher $fetcher = NULL) public function __construct(string $stability, string $arch, Cache $cache, Fetcher $fetcher = NULL)
@@ -59,6 +68,7 @@ class Series
return "$base/series/$file"; return "$base/series/$file";
}/*}}}*/ }/*}}}*/
/** @return array<string>|string */
public function getData(bool $raw = false, bool $cache = true) public function getData(bool $raw = false, bool $cache = true)
{/*{{{*/ {/*{{{*/
if ($cache && $this->rawData) { if ($cache && $this->rawData) {
+20 -2
View File
@@ -7,13 +7,25 @@ use SDK\{Config as SDKConfig, Exception};
abstract class PHP abstract class PHP
{ {
/** @var string */
protected $php_root; protected $php_root;
/** @var string */
protected $php_ext_root; protected $php_ext_root;
/** @var string */
protected $opcache_file_cache; protected $opcache_file_cache;
/** @var string */
protected $id; protected $id;
/** @var string */
protected $scenario; protected $scenario;
/** @var \SDK\Build\PGO\Config */
protected $conf; protected $conf;
/** @return void */
protected function setupPaths() protected function setupPaths()
{ {
$this->php_root = $this->getRootDir(); $this->php_root = $this->getRootDir();
@@ -30,12 +42,15 @@ abstract class PHP
} }
} }
abstract public function getExeFilename() : string;
/* TODO Might be improved. */ /* TODO Might be improved. */
public function isDist() : bool public function isDist() : bool
{ {
return !file_exists("Makefile") && file_exists("php.exe"); return !file_exists("Makefile") && file_exists("php.exe");
} }
/** @return array<string,string> */
protected function createEnv() : array protected function createEnv() : array
{ {
$env = getenv(); $env = getenv();
@@ -96,7 +111,7 @@ abstract class PHP
public function getVersion(bool $short = false) : string public function getVersion(bool $short = false) : string
{ {
$ret = NULL; $ret = NULL;
$cli = new CLI($this->conf, $this->scenario); $cli = new CLI($this->conf);
$out = shell_exec($cli->getExeFilename() . " -n -v"); $out = shell_exec($cli->getExeFilename() . " -n -v");
@@ -119,7 +134,7 @@ abstract class PHP
public function isThreadSafe() : bool public function isThreadSafe() : bool
{ {
$cli = new CLI($this->conf, $this->scenario); $cli = new CLI($this->conf);
$out = shell_exec($cli->getExeFilename() . " -n -v"); $out = shell_exec($cli->getExeFilename() . " -n -v");
@@ -131,6 +146,7 @@ abstract class PHP
} }
/* Need to cleanup it somewhere. */ /* Need to cleanup it somewhere. */
/** @return string */
public function getIniFilename() public function getIniFilename()
{ {
$ret = tempnam(sys_get_temp_dir(), "ini"); $ret = tempnam(sys_get_temp_dir(), "ini");
@@ -163,6 +179,7 @@ abstract class PHP
return $ret; return $ret;
} }
/** @return string */
protected function getIniTplFilename() protected function getIniTplFilename()
{ {
$tpl_path = $this->conf->getTplDir("php"); $tpl_path = $this->conf->getTplDir("php");
@@ -178,6 +195,7 @@ abstract class PHP
return $construct; return $construct;
} }
/** @param array<string,string> $extra_env */
public function exec(string $php_cmd, string $args = NULL, array $extra_env = array()) : int public function exec(string $php_cmd, string $args = NULL, array $extra_env = array()) : int
{ {
$env = $this->createEnv(); $env = $this->createEnv();
@@ -6,6 +6,12 @@ use SDK\Build\PGO\Interfaces;
abstract class Server abstract class Server
{ {
/** @var string */
protected $name;
/** @var Interfaces\PHP */
protected $php;
public function getName() : string public function getName() : string
{ {
return $this->name; return $this->name;
@@ -3,19 +3,27 @@
namespace SDK\Build\PGO\Abstracts; namespace SDK\Build\PGO\Abstracts;
use SDK\FileOps; use SDK\FileOps;
use SDK\Build\PGO\Interfaces;
use SDK\Build\PGO\Tool; use SDK\Build\PGO\Tool;
abstract class TrainingCase abstract class TrainingCase implements Interfaces\TrainingCase
{ {
use FileOps; use FileOps;
const TYPE_WEB = "web"; const TYPE_WEB = "web";
const TYPE_CLI = "cli"; const TYPE_CLI = "cli";
/** @var array<mixed> */
protected $stat = array(); protected $stat = array();
/** @var \SDK\Build\PGO\Config */ /** @var \SDK\Build\PGO\Config */
protected $conf; protected $conf;
/** @var mixed */
protected $php;
abstract public function getName() : string;
public function getType() : string public function getType() : string
{ {
$type = $this->conf->getSectionItem($this->getName(), "type"); $type = $this->conf->getSectionItem($this->getName(), "type");
+28
View File
@@ -11,11 +11,22 @@ class Config
const MODE_REINIT = 2; /* currently unused */ const MODE_REINIT = 2; /* currently unused */
const MODE_CHECK_INIT = 3; const MODE_CHECK_INIT = 3;
/** @var int */
protected $mode; protected $mode;
/** @var int */
protected $last_port = 8081; protected $last_port = 8081;
/** @var array<string,mixed> */
protected $sections = array(); protected $sections = array();
/** @var string */
protected $scenario = "default"; protected $scenario = "default";
/** @var array<mixed> */
protected $tpl_vars = array(); protected $tpl_vars = array();
/** @var array<mixed> */
protected $srv = array(); protected $srv = array();
public function __construct(int $mode = self::MODE_RUN) public function __construct(int $mode = self::MODE_RUN)
@@ -67,6 +78,7 @@ class Config
} }
} }
/** @return bool */
public function isInitialized() public function isInitialized()
{ {
/* XXX Could be some better check. */ /* XXX Could be some better check. */
@@ -161,6 +173,7 @@ class Config
return $ret; return $ret;
} }
/** @param string ...$args */
public function sectionItemExists(...$args) : bool public function sectionItemExists(...$args) : bool
{ {
$i = 0; $i = 0;
@@ -178,6 +191,10 @@ class Config
return $i == count($args); return $i == count($args);
} }
/**
* @param string ...$args
* @return mixed
*/
public function getSectionItem(...$args) public function getSectionItem(...$args)
{ {
$i = 0; $i = 0;
@@ -199,6 +216,7 @@ class Config
return $it; return $it;
} }
/** @param string|int ...$args */
public function setSectionItem(...$args) : void public function setSectionItem(...$args) : void
{ {
$val = array_pop($args); $val = array_pop($args);
@@ -238,6 +256,7 @@ class Config
} }
} }
/** @param string ...$args */
public function buildTplVarName(...$args) : string public function buildTplVarName(...$args) : string
{ {
$tpl_k = array("PHP_SDK_PGO"); $tpl_k = array("PHP_SDK_PGO");
@@ -249,6 +268,7 @@ class Config
return implode("_", $tpl_k); return implode("_", $tpl_k);
} }
/** @param array<string,mixed> $section */
protected function importTplVars(string $section_name, array $section) : void protected function importTplVars(string $section_name, array $section) : void
{ {
foreach($section as $k0 => $v0) { foreach($section as $k0 => $v0) {
@@ -266,6 +286,7 @@ class Config
} }
} }
/** @param array<mixed> $additional_vars */
public function processTpl(string $s, array $additional_vars = array()) : string public function processTpl(string $s, array $additional_vars = array()) : string
{ {
$vars = array_merge($this->tpl_vars, $additional_vars); $vars = array_merge($this->tpl_vars, $additional_vars);
@@ -275,6 +296,7 @@ class Config
return $s; return $s;
} }
/** @param array<mixed> $additional_vars */
public function processTplFile(string $tpl_fn, string $dst_fn, array $additional_vars = array()) : void public function processTplFile(string $tpl_fn, string $dst_fn, array $additional_vars = array()) : void
{ {
if (!file_exists($tpl_fn)) { if (!file_exists($tpl_fn)) {
@@ -293,6 +315,7 @@ class Config
} }
} }
/** @return string */
public function getWorkSectionsFilename() public function getWorkSectionsFilename()
{ {
return $this->getWorkDir() . DIRECTORY_SEPARATOR . "phpsdk_pgo.json"; return $this->getWorkDir() . DIRECTORY_SEPARATOR . "phpsdk_pgo.json";
@@ -338,6 +361,10 @@ class Config
return getenv("PHP_SDK_PHP_CMD"); return getenv("PHP_SDK_PHP_CMD");
} }
/**
* @param Interfaces\Server $item
* @return void
*/
public function addSrv($item) : void public function addSrv($item) : void
{ {
$name = strtolower($item->getName()); $name = strtolower($item->getName());
@@ -350,6 +377,7 @@ class Config
$this->srv[$name] = $item; $this->srv[$name] = $item;
} }
/** @return array<string,Interfaces\Server>|Interfaces\Server|null */
public function getSrv(?string $name = NULL) public function getSrv(?string $name = NULL)
{ {
$ret = NULL; $ret = NULL;
+24 -5
View File
@@ -13,11 +13,19 @@ use SDK\Build\PGO\Tool\{PGO, PackageWorkman};
class Controller class Controller
{ {
/** @var string */
protected $cmd; protected $cmd;
/** @var ?string */
protected $scenario; protected $scenario;
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var array<string>|null */
protected $cases; protected $cases;
/** @param array<string>|null $cases */
public function __construct(string $cmd, ?string $scenario, ?array $cases) public function __construct(string $cmd, ?string $scenario, ?array $cases)
{ {
$this->cmd = $cmd; $this->cmd = $cmd;
@@ -29,6 +37,7 @@ class Controller
$this->cases = $cases; $this->cases = $cases;
} }
/** @return mixed */
protected function vitalizeSrv() protected function vitalizeSrv()
{ {
$all = $this->conf->getSrv("all"); $all = $this->conf->getSrv("all");
@@ -47,12 +56,15 @@ class Controller
return $all; return $all;
} }
/**
* @param string $cmd
* @return PGOConfig
*/
protected function setupConfig($cmd) protected function setupConfig($cmd)
{ {
switch ($cmd) { switch ($cmd) {
default: default:
throw new Exception("Unknown action '{$cmd}'."); throw new Exception("Unknown action '{$cmd}'.");
break;
case "check_init": case "check_init":
$cnf = new PGOConfig(PGOConfig::MODE_CHECK_INIT); $cnf = new PGOConfig(PGOConfig::MODE_CHECK_INIT);
break; break;
@@ -69,6 +81,10 @@ class Controller
return $cnf; return $cnf;
} }
/**
* @param bool $force
* @return void
*/
public function handle($force) public function handle($force)
{ {
/*$mode = (int)("init" !== $this->cmd); /*$mode = (int)("init" !== $this->cmd);
@@ -80,7 +96,6 @@ class Controller
switch ($this->cmd) { switch ($this->cmd) {
default: default:
throw new Exception("Unknown action '{$this->cmd}'."); throw new Exception("Unknown action '{$this->cmd}'.");
break;
case "init": case "init":
$lk = new Lock("pgo_init"); $lk = new Lock("pgo_init");
if (!$lk->locked()) { if (!$lk->locked()) {
@@ -140,7 +155,6 @@ class Controller
if (!file_exists($composer) || $force) { if (!file_exists($composer) || $force) {
/* XXX this needs to go into the config, specifically for composer maybe even separate class. */ /* XXX this needs to go into the config, specifically for composer maybe even separate class. */
$url = "https://getcomposer.org/installer"; $url = "https://getcomposer.org/installer";
/* XXX remove the explicit version option when symfony demo is fixed. */
$tool = $this->conf->getToolsDir() . DIRECTORY_SEPARATOR . "composer-setup.php"; $tool = $this->conf->getToolsDir() . DIRECTORY_SEPARATOR . "composer-setup.php";
$pw->fetch($url, $tool, $force); $pw->fetch($url, $tool, $force);
$php->exec("$tool --install-dir=" . $this->conf->getToolsDir()); $php->exec("$tool --install-dir=" . $this->conf->getToolsDir());
@@ -148,6 +162,7 @@ class Controller
} }
} }
/** @return void */
public function init(bool $force = false) public function init(bool $force = false)
{ {
echo "\nInitializing PGO training environment.\n\n"; echo "\nInitializing PGO training environment.\n\n";
@@ -181,11 +196,13 @@ class Controller
echo "PGO training environment Initialization complete.\n"; echo "PGO training environment Initialization complete.\n";
} }
/** @return bool */
public function isInitialized() public function isInitialized()
{ {
return $this->conf->isinitialized(); return $this->conf->isinitialized();
} }
/** @return void */
public function train() public function train()
{ {
if (!$this->isInitialized()) { if (!$this->isInitialized()) {
@@ -234,6 +251,7 @@ class Controller
echo "PGO training complete.\n"; echo "PGO training complete.\n";
} }
/** @return void */
public function up() public function up()
{ {
@@ -242,7 +260,7 @@ class Controller
} }
echo "\nStarting up PGO environment.\n\n"; echo "\nStarting up PGO environment.\n\n";
foreach ($this->vitalizeSrv("all") as $srv) { foreach ($this->vitalizeSrv() as $srv) {
$srv->up(); $srv->up();
echo "\n"; echo "\n";
} }
@@ -252,6 +270,7 @@ class Controller
echo "The PGO environment is up.\n"; echo "The PGO environment is up.\n";
} }
/** @return void */
public function down(bool $force = false) public function down(bool $force = false)
{ {
if (!$this->isInitialized()) { if (!$this->isInitialized()) {
@@ -260,7 +279,7 @@ class Controller
/* XXX check it was started of course. */ /* XXX check it was started of course. */
echo "\nShutting down PGO environment.\n\n"; echo "\nShutting down PGO environment.\n\n";
foreach ($this->vitalizeSrv("all") as $srv) { foreach ($this->vitalizeSrv() as $srv) {
$srv->down($force); $srv->down($force);
echo "\n"; echo "\n";
} }
@@ -12,4 +12,7 @@ interface Server
public function up() : void; public function up() : void;
public function down(bool $force = false) : void; public function down(bool $force = false) : void;
public function getName() : string; public function getName() : string;
/** @return \SDK\Build\PGO\Interfaces\PHP */
public function getPhp();
} }
@@ -9,5 +9,10 @@ interface HTTP extends Interfaces\Server
{ {
public function __construct(Config $conf, Interfaces\PHP $php); public function __construct(Config $conf, Interfaces\PHP $php);
public function getPhp() : Interfaces\PHP; public function getPhp() : Interfaces\PHP;
/**
* @param array<mixed> $tpl_vars
* @return void
*/
public function addServer(string $part_tpl_fn, array $tpl_vars = array()); public function addServer(string $part_tpl_fn, array $tpl_vars = array());
} }
@@ -12,6 +12,7 @@ class FCGI extends Abstracts\PHP implements Interfaces\PHP
{ {
use FileOps; use FileOps;
/** @var bool */
protected $is_tcp; protected $is_tcp;
public function __construct(PGOConfig $conf, bool $is_tcp) public function __construct(PGOConfig $conf, bool $is_tcp)
@@ -12,8 +12,13 @@ class MariaDB extends Server implements DB
{ {
use FileOps; use FileOps;
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var string */
protected $base; protected $base;
/** @var string */
protected $name = "MariaDB"; protected $name = "MariaDB";
public function __construct(PGOConfig $conf) public function __construct(PGOConfig $conf)
@@ -22,6 +27,7 @@ class MariaDB extends Server implements DB
$this->base = $conf->getSrvDir(strtolower($this->name)); $this->base = $conf->getSrvDir(strtolower($this->name));
} }
/** @return void */
protected function setupDist() protected function setupDist()
{ {
/* pass */ /* pass */
@@ -12,9 +12,16 @@ class NGINX extends Abstracts\Server implements Interfaces\Server\HTTP
{ {
use FileOps; use FileOps;
/** @var string */
protected $name = "NGINX"; protected $name = "NGINX";
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var string */
protected $base; protected $base;
/** @var Interfaces\PHP */
protected $php; protected $php;
public function __construct(PGOConfig $conf, Interfaces\PHP $php) public function __construct(PGOConfig $conf, Interfaces\PHP $php)
@@ -125,6 +132,10 @@ class NGINX extends Abstracts\Server implements Interfaces\Server\HTTP
} }
/* Use only for init phase! */ /* Use only for init phase! */
/**
* @param array<mixed> $tpl_vars
* @return void
*/
public function addServer(string $part_tpl_fn, array $tpl_vars = array()) public function addServer(string $part_tpl_fn, array $tpl_vars = array())
{ {
if (!file_exists($part_tpl_fn)) { if (!file_exists($part_tpl_fn)) {
@@ -12,9 +12,16 @@ class PostgreSQL extends Server implements DB
{ {
use FileOps; use FileOps;
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var string */
protected $base; protected $base;
/** @var string */
protected $data_dir; protected $data_dir;
/** @var string */
protected $name = "PostgreSQL"; protected $name = "PostgreSQL";
public function __construct(PGOConfig $conf) public function __construct(PGOConfig $conf)
@@ -24,6 +31,7 @@ class PostgreSQL extends Server implements DB
$this->data_dir = $this->base . DIRECTORY_SEPARATOR . "data"; $this->data_dir = $this->base . DIRECTORY_SEPARATOR . "data";
} }
/** @return void */
protected function setupDist() protected function setupDist()
{ {
$user = $this->conf->getSectionItem($this->name, "user"); $user = $this->conf->getSectionItem($this->name, "user");
@@ -8,8 +8,13 @@ use SDK\Build\PGO\Interfaces;
class PGO class PGO
{ {
/** @var Interfaces\PHP */
protected $php; protected $php;
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var int */
protected $idx = 0; protected $idx = 0;
public function __construct(PGOConfig $conf, Interfaces\PHP $php) public function __construct(PGOConfig $conf, Interfaces\PHP $php)
@@ -34,6 +39,7 @@ class PGO
return $dn . DIRECTORY_SEPARATOR . $bn . ".pgd"; return $dn . DIRECTORY_SEPARATOR . $bn . ".pgd";
} }
/** @return array<string> */
protected function getWorkItems() : array protected function getWorkItems() : array
{ {
$exe = glob($this->php->getRootDir() . DIRECTORY_SEPARATOR . "*.exe"); $exe = glob($this->php->getRootDir() . DIRECTORY_SEPARATOR . "*.exe");
@@ -10,6 +10,7 @@ class PackageWorkman
{ {
use FileOps; use FileOps;
/** @var PGOConfig */
protected $conf; protected $conf;
public function __construct(PGOConfig $conf) public function __construct(PGOConfig $conf)
@@ -8,7 +8,10 @@ use SDK\Build\PGO\Interfaces\TrainingCase;
class Training class Training
{ {
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var TrainingCase */
protected $t_case; protected $t_case;
public function __construct(PGOConfig $conf, TrainingCase $t_case) public function __construct(PGOConfig $conf, TrainingCase $t_case)
@@ -27,6 +30,7 @@ class Training
return $this->t_case; return $this->t_case;
} }
/** @param array<string,mixed> $stat */
public function runWeb(int $max_runs, ?array &$stat = array()) : void public function runWeb(int $max_runs, ?array &$stat = array()) : void
{ {
$url_list_fn = $this->t_case->getJobFilename(); $url_list_fn = $this->t_case->getJobFilename();
@@ -105,6 +109,7 @@ class Training
} }
/* TODO Extend with number runs. */ /* TODO Extend with number runs. */
/** @param array<string,mixed> $stat */
public function run(int $max_runs = 1, ?array &$stat = array()) : void public function run(int $max_runs = 1, ?array &$stat = array()) : void
{ {
$type = $this->t_case->getType(); $type = $this->t_case->getType();
@@ -4,12 +4,21 @@ namespace SDK\Build\PGO;
use SDK\Build\PGO\Config as PGOConfig; use SDK\Build\PGO\Config as PGOConfig;
/**
* @implements \Iterator<?string,Interfaces\TrainingCase>
*/
class TrainingCaseIterator implements \Iterator class TrainingCaseIterator implements \Iterator
{ {
/** @var PGOConfig */
protected $conf; protected $conf;
/** @var array<string> */
protected $items = array(); protected $items = array();
/** @var int */
protected $idx; protected $idx;
/** @var object */
protected $el; protected $el;
public function __construct(PGOConfig $conf) public function __construct(PGOConfig $conf)
@@ -50,6 +59,7 @@ class TrainingCaseIterator implements \Iterator
return $base . DIRECTORY_SEPARATOR . "TrainingCaseHandler.php"; return $base . DIRECTORY_SEPARATOR . "TrainingCaseHandler.php";
} }
#[\ReturnTypeWillChange]
public function current() public function current()
{ {
$base = $this->items[$this->idx]; $base = $this->items[$this->idx];
@@ -73,21 +83,25 @@ class TrainingCaseIterator implements \Iterator
return $this->el; return $this->el;
} }
#[\ReturnTypeWillChange]
public function next() public function next()
{ {
$this->idx++; $this->idx++;
} }
#[\ReturnTypeWillChange]
public function rewind() public function rewind()
{ {
$this->idx = 0; $this->idx = 0;
} }
#[\ReturnTypeWillChange]
public function valid() public function valid()
{ {
return $this->idx < count($this->items); return $this->idx < count($this->items);
} }
#[\ReturnTypeWillChange]
public function key() public function key()
{ {
if (!is_object($this->el)) { if (!is_object($this->el)) {
+4 -1
View File
@@ -4,7 +4,10 @@ namespace SDK;
class Cache class Cache
{ {
/** @var string */
protected $id; protected $id;
/** @var string */
protected $hash; protected $hash;
public function __construct(string $id) public function __construct(string $id)
@@ -79,7 +82,7 @@ class Cache
{/*{{{*/ {/*{{{*/
$p = $this->getCacheablePath($path, $relative); $p = $this->getCacheablePath($path, $relative);
if ($this->isFileCached($p)) { if (file_exists($p)) {
return file_get_contents($p); return file_get_contents($p);
} }
+32 -9
View File
@@ -7,20 +7,40 @@ use SDK\Build\Dependency\Fetcher;
class Config class Config
{ {
/* Config variables. */ /* Config variables. */
/** @var string */
protected static $depsHost = 'downloads.php.net'; protected static $depsHost = 'downloads.php.net';
/** @var int */
protected static $depsPort = 443; protected static $depsPort = 443;
/** @var string */
protected static $depsUriScheme = "https"; protected static $depsUriScheme = "https";
/** @var string */
protected static $depsBaseUri = "/~windows/php-sdk/deps"; protected static $depsBaseUri = "/~windows/php-sdk/deps";
/* protected static $sdkNugetFeedUrl = "http://127.0.0.1/sdk/nuget"; */ /** @var string */
protected static $sdkNugetFeedUrl = "http://127.0.0.1/sdk/nuget"; // experimental?
/** @var array<mixed> */
protected static $knownBranches = array (); protected static $knownBranches = array ();
/* Helper props and methods. */ /* Helper props and methods. */
/** @var ?string */
protected static $currentBranchName = NULL; protected static $currentBranchName = NULL;
/** @var ?string */
protected static $currentArchName = NULL; protected static $currentArchName = NULL;
/** @var ?string */
protected static $currentCrtName = NULL; protected static $currentCrtName = NULL;
/** @var ?string */
protected static $currentStabilityName = NULL; protected static $currentStabilityName = NULL;
/** @var ?string */
protected static $depsLocalPath = NULL; protected static $depsLocalPath = NULL;
public static function getDepsHost() : string public static function getDepsHost() : string
@@ -28,7 +48,7 @@ class Config
return self::$depsHost; return self::$depsHost;
}/*}}}*/ }/*}}}*/
public static function getDepsPort() : string public static function getDepsPort() : int
{/*{{{*/ {/*{{{*/
return self::$depsPort; return self::$depsPort;
}/*}}}*/ }/*}}}*/
@@ -134,6 +154,7 @@ class Config
return self::$currentStabilityName; return self::$currentStabilityName;
} /*}}}*/ } /*}}}*/
/** @return array<mixed> */
public static function getKnownBranches() : array public static function getKnownBranches() : array
{/*{{{*/ {/*{{{*/
if (empty(self::$knownBranches)) { if (empty(self::$knownBranches)) {
@@ -146,7 +167,7 @@ class Config
$fetcher = new Fetcher(self::$depsHost, self::$depsPort, self::$depsUriScheme); $fetcher = new Fetcher(self::$depsHost, self::$depsPort, self::$depsUriScheme);
$tmp = $fetcher->getByUri(self::$depsBaseUri . "/series/"); $tmp = $fetcher->getByUri(self::$depsBaseUri . "/series/");
if (false !== $tmp) { if ("" !== $tmp) {
$data = array(); $data = array();
if (preg_match_all(",packages-(.+)-(v[cs]\d+)-(x86|x64|arm64)-(stable|staging)\.txt,Us", $tmp, $m, PREG_SET_ORDER)) { if (preg_match_all(",packages-(.+)-(v[cs]\d+)-(x86|x64|arm64)-(stable|staging)\.txt,Us", $tmp, $m, PREG_SET_ORDER)) {
foreach ($m as $b) { foreach ($m as $b) {
@@ -197,7 +218,7 @@ class Config
} }
/* Try to figure out the branch. The worky scenarios are /* Try to figure out the branch. The worky scenarios are
- CWD is in php-src - CWD is in php-src
- phpize is on the path - phpize is on the path
FIXME for the dev package, there should be a php-config utility FIXME for the dev package, there should be a php-config utility
*/ */
@@ -235,7 +256,7 @@ class Config
$cmd = "\"$git\" branch"; $cmd = "\"$git\" branch";
$ret = trim(shell_exec($cmd)); $ret = trim(shell_exec($cmd));
if (preg_match_all(",\*\s+master,", $ret) > 0) { if (preg_match_all(",\*\s+master,", $ret) > 0) {
$branch = "master"; $branch = "master";
} }
} }
@@ -250,10 +271,11 @@ class Config
$branch = self::guessCurrentBranchName(); $branch = self::guessCurrentBranchName();
self::setCurrentBranchName($branch); self::setCurrentBranchName($branch);
} }
return self::$currentBranchName; return self::$currentBranchName;
}/*}}}*/ }/*}}}*/
/** @return array<mixed> */
public static function getCurrentBranchData() : array public static function getCurrentBranchData() : array
{/*{{{*/ {/*{{{*/
$ret = array(); $ret = array();
@@ -264,6 +286,7 @@ class Config
throw new Exception("Unknown branch '$current_branch_name'"); throw new Exception("Unknown branch '$current_branch_name'");
} }
$crt = null;
$cur_crt = Config::getCurrentCrtName(); $cur_crt = Config::getCurrentCrtName();
if (count($branches[$current_branch_name]) > 1) { if (count($branches[$current_branch_name]) > 1) {
if (NULL === $cur_crt) { if (NULL === $cur_crt) {
@@ -313,7 +336,7 @@ class Config
throw new Exception("Failed to find config with arch '" . self::getCurrentArchName() . "'"); throw new Exception("Failed to find config with arch '" . self::getCurrentArchName() . "'");
} }
return $ret; return $ret;
}/*}}}*/ }/*}}}*/
public static function getSdkNugetFeedUrl() : string public static function getSdkNugetFeedUrl() : string
@@ -345,7 +368,7 @@ class Config
throw new Exception("Couldn't find the SDK version file."); throw new Exception("Couldn't find the SDK version file.");
} }
return file_get_contents($path); return trim(file_get_contents($path));
}/*}}}*/ }/*}}}*/
public static function getDepsLocalPath() : ?string public static function getDepsLocalPath() : ?string
@@ -368,7 +391,7 @@ class Config
self::setDepsLocalPath($tmp); self::setDepsLocalPath($tmp);
} }
} }
if (NULL == self::$depsLocalPath) { if (NULL == self::$depsLocalPath) {
$tmp = realpath("../deps"); $tmp = realpath("../deps");
if (is_dir($tmp)) { if (is_dir($tmp)) {
+1
View File
@@ -90,6 +90,7 @@ trait FileOps
if ($item->isFile()) { if ($item->isFile()) {
if (!call_user_func($cb, $src_path, $dst_path)) { if (!call_user_func($cb, $src_path, $dst_path)) {
assert(is_string($cb));
throw new Exception("Unable to $cb '$src_path' to '$dst_path'"); throw new Exception("Unable to $cb '$src_path' to '$dst_path'");
} }
} }
+9
View File
@@ -4,10 +4,19 @@ namespace SDK;
class Lock class Lock
{ {
/** @var ?resource */
protected $fd; protected $fd;
/** @var string */
protected $fn; protected $fn;
/** @var bool */
protected $locked = false; protected $locked = false;
/** @var bool|int */
protected $wouldBlock = false; protected $wouldBlock = false;
/** @var bool|int */
protected $shared = false; protected $shared = false;
public function __construct(string $tag, bool $auto = true, bool $autoShared = false) public function __construct(string $tag, bool $auto = true, bool $autoShared = false)
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
+8
View File
@@ -11,9 +11,16 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var mixed */
protected $php; protected $php;
/** @var int */
protected $max_runs = 8; protected $max_runs = 8;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria)
@@ -65,6 +72,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
$this->nginx->addServer($tpl_fn, $vars); $this->nginx->addServer($tpl_fn, $vars);
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$this->nginx->up(); $this->nginx->up();
+10
View File
@@ -11,10 +11,19 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var mixed */
protected $php; protected $php;
/** @var ?Interfaces\Server\DB */
protected $maria; protected $maria;
/** @var int */
protected $max_runs = 4; protected $max_runs = 4;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria)
@@ -99,6 +108,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
$this->maria->down(true); $this->maria->down(true);
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$this->maria->up(); $this->maria->up();
@@ -11,9 +11,16 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var mixed */
protected $php; protected $php;
/** @var int */
protected $max_runs = 4; protected $max_runs = 4;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $srv_db) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $srv_db)
@@ -82,6 +89,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
$php->exec($cmd); $php->exec($cmd);
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$this->nginx->up(); $this->nginx->up();
@@ -11,10 +11,19 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var ?Interfaces\Server\DB */
protected $maria; protected $maria;
/** @var mixed */
protected $php; protected $php;
/** @var int */
protected $max_runs = 12; protected $max_runs = 12;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria)
@@ -119,6 +128,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$url = "http://" . $this->getHttpHost() . ":" . $this->getHttpPort(); $url = "http://" . $this->getHttpHost() . ":" . $this->getHttpPort();
@@ -11,9 +11,16 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var mixed */
protected $php; protected $php;
/** @var int */
protected $max_runs = 4; protected $max_runs = 4;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $srv_db) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $srv_db)
@@ -61,6 +68,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
$this->nginx->addServer($tpl_fn, $vars); $this->nginx->addServer($tpl_fn, $vars);
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$this->nginx->up(); $this->nginx->up();
@@ -11,10 +11,19 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var ?Interfaces\Server\DB */
protected $maria; protected $maria;
/** @var mixed */
protected $php; protected $php;
/** @var int */
protected $max_runs = 4; protected $max_runs = 4;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $srv_db) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $srv_db)
@@ -80,6 +89,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
$this->nginx->addServer($tpl_fn, $vars); $this->nginx->addServer($tpl_fn, $vars);
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$this->maria->up(); $this->maria->up();
@@ -11,10 +11,19 @@ use SDK\Build\PGO\Tool;
class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\TrainingCase
{ {
/** @var string */
protected $base; protected $base;
/** @var ?Interfaces\Server $nginx */
protected $nginx; protected $nginx;
/** @var ?Interfaces\Server\DB */
protected $maria; protected $maria;
/** @var mixed */
protected $php; protected $php;
/** @var int */
protected $max_runs = 4; protected $max_runs = 4;
public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria) public function __construct(Config $conf, ?Interfaces\Server $nginx, ?Interfaces\Server\DB $maria)
@@ -106,6 +115,7 @@ class TrainingCaseHandler extends Abstracts\TrainingCase implements Interfaces\T
} }
/** @return void */
public function setupUrls() public function setupUrls()
{ {
$this->maria->up(); $this->maria->up();
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"pkg_url": "https://nginx.org/download/nginx-1.17.6.zip", "pkg_url": "https://nginx.org/download/nginx-1.26.2.zip",
"host": "127.0.0.1", "host": "127.0.0.1",
"port": 8081 "port": 8081
} }
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
zend_extension=php_opcache.dll zend_extension=php_opcache.dll
opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
; Module Settings ; ; Module Settings ;
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
zend_extension=php_opcache.dll zend_extension=php_opcache.dll
opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
; Module Settings ; ; Module Settings ;
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
zend_extension=php_opcache.dll zend_extension=php_opcache.dll
opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
; Module Settings ; ; Module Settings ;
+1 -1
View File
@@ -981,7 +981,7 @@ extension=php_sqlite3.dll
;extension=php_tidy.dll ;extension=php_tidy.dll
;extension=php_xmlrpc.dll ;extension=php_xmlrpc.dll
;extension=php_xsl.dll ;extension=php_xsl.dll
;extension=php_zip.dll extension=php_zip.dll
zend_extension=php_opcache.dll zend_extension=php_opcache.dll
opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION opcache.memory_consumption=PHP_SDK_PGO_PHP_OPCACHE_MEMORY_CONSUMPTION

Some files were not shown because too many files have changed in this diff Show More