]> granicus.if.org Git - php/commitdiff
Add test for zend_extension loading
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 21 Oct 2020 08:34:34 +0000 (10:34 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 21 Oct 2020 10:16:56 +0000 (12:16 +0200)
Closes GH-6363.

sapi/cli/tests/ext_loading.phpt [new file with mode: 0644]

diff --git a/sapi/cli/tests/ext_loading.phpt b/sapi/cli/tests/ext_loading.phpt
new file mode 100644 (file)
index 0000000..220302d
--- /dev/null
@@ -0,0 +1,65 @@
+--TEST--
+Extension loading
+--SKIPIF--
+<?php
+$extDir = ini_get('extension_dir');
+if (!file_exists($extDir . '/opcache.so') && !file_exists($extDir . '/php_opcache.dll')) {
+    die('skip Opcache shared object not found in extension_dir');
+}
+?>
+--FILE--
+<?php
+
+
+function loadZendExt($extension) {
+    $cmd = [
+        PHP_BINARY, '-n',
+        '-dextension_dir=' . ini_get('extension_dir'),
+        '-dzend_extension=' . $extension,
+        '-r', 'echo "Done.";'
+    ];
+    $proc = proc_open($cmd, [['null'], ['pipe', 'w'], ['redirect', 1]], $pipes);
+    echo "Output: ", stream_get_contents($pipes[1]), "\n";
+}
+
+echo "Only extension name:\n";
+loadZendExt('opcache');
+
+echo "Name with file extension:\n";
+$name = PHP_OS_FAMILY == 'Windows' ? 'php_opcache.dll' : 'opcache.so';
+loadZendExt($name);
+
+echo "Absolute path:\n";
+$path = ini_get('extension_dir') . DIRECTORY_SEPARATOR . $name;
+loadZendExt($path);
+
+echo "Unknown extension name (unknown):\n";
+loadZendExt('unknown_ext');
+
+echo "Name with file extension (unknown):\n";
+$name = PHP_OS_FAMILY == 'Windows' ? 'php_unknown_ext.dll' : 'unknown_ext.so';
+loadZendExt($name);
+
+echo "Absolute path (unknown):\n";
+$path = ini_get('extension_dir') . DIRECTORY_SEPARATOR . $name;
+loadZendExt($path);
+
+?>
+--EXPECTF--
+Only extension name:
+Output: Done.
+Name with file extension:
+Output: Done.
+Absolute path:
+Output: Done.
+Unknown extension name (unknown):
+Output: 
+Warning: Failed loading Zend extension 'unknown_ext' (tried: %s) in Unknown on line 0
+Done.
+Name with file extension (unknown):
+Output: 
+Warning: Failed loading Zend extension '%Sunknown_ext%S' (tried: %s) in Unknown on line 0
+Done.
+Absolute path (unknown):
+Output: Failed loading %s
+Done.