mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-28 17:52:43 +01:00
Remove pcntl/php CLI setup checks
Summary: As far as I know, we never actually need `php` to be available from the web UI. I think the history here is: - Long ago, we checked for 'pcntl' as an extension during setup. - Someone had an install where 'pcntl' was available from the CLI, but not the web UI. So we switched the check to use the CLI. - Someone had an install where the CLI binary was php-fpm, which caused the 'pcntl' check to loop endlessly, so we added more checks. But we don't actually need to do any of this -- when the user tries to run the daemons, they get an explicit message that they need to install pcntl already, and we never (as far as I know) try to run PHP scripts from the web UI other than the pcntl_available.php check (we only run `git`, `svn`, `hg`, `ssh-agent`, `diff`, `xhpast` and `pygmentize`, I think). Test Plan: Thought carefully about places we might execute PHP scripts from the web UI. Looked through /scripts/ to try to identfiy anything we might execute. Reviewers: btrahan, vrana Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D4568
This commit is contained in:
parent
7137492e4a
commit
d5b006b2cc
2 changed files with 0 additions and 93 deletions
|
@ -1,8 +0,0 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
if (extension_loaded('pcntl')) {
|
||||
echo "YES\n";
|
||||
} else {
|
||||
echo "NO\n";
|
||||
}
|
|
@ -152,93 +152,8 @@ final class PhabricatorSetup {
|
|||
}
|
||||
}
|
||||
|
||||
list($err, $stdout, $stderr) = exec_manual('which php');
|
||||
if ($err) {
|
||||
self::writeFailure();
|
||||
self::write("Unable to locate 'php' on the command line from the web ".
|
||||
"server. Verify that 'php' is in the webserver's PATH.\n".
|
||||
" err: {$err}\n".
|
||||
"stdout: {$stdout}\n".
|
||||
"stderr: {$stderr}\n");
|
||||
return;
|
||||
} else {
|
||||
self::write(" okay PHP binary found on the command line.\n");
|
||||
$php_bin = trim($stdout);
|
||||
}
|
||||
|
||||
// NOTE: In cPanel + suphp installs, 'php' may be the PHP CGI SAPI, not the
|
||||
// PHP CLI SAPI. proc_open() will pass the environment to the child process,
|
||||
// which will re-execute the webpage (causing an infinite number of
|
||||
// processes to spawn). To test that the 'php' binary is safe to execute,
|
||||
// we call php_sapi_name() using "env -i" to wipe the environment so it
|
||||
// doesn't execute another reuqest if it's the wrong binary. We can't use
|
||||
// "-r" because php-cgi doesn't support that flag.
|
||||
|
||||
$tmp_file = new TempFile('sapi.php');
|
||||
Filesystem::writeFile($tmp_file, '<?php echo php_sapi_name();');
|
||||
|
||||
list($err, $stdout, $stderr) = exec_manual(
|
||||
'/usr/bin/env -i %s -f %s',
|
||||
$php_bin,
|
||||
$tmp_file);
|
||||
if ($err) {
|
||||
self::writeFailure();
|
||||
self::write("Unable to execute 'php' on the command line from the web ".
|
||||
"server.\n".
|
||||
" err: {$err}\n".
|
||||
"stdout: {$stdout}\n".
|
||||
"stderr: {$stderr}\n");
|
||||
return;
|
||||
} else {
|
||||
self::write(" okay PHP is available from the command line.\n");
|
||||
|
||||
$sapi = trim($stdout);
|
||||
if ($sapi != 'cli') {
|
||||
self::writeFailure();
|
||||
self::write(
|
||||
"The 'php' binary on this system uses the '{$sapi}' SAPI, but the ".
|
||||
"'cli' SAPI is expected. Replace 'php' with the php-cli SAPI ".
|
||||
"binary, or edit your webserver configuration so the first 'php' ".
|
||||
"in PATH is the 'cli' SAPI.\n\n".
|
||||
"If you're running cPanel with suphp, the easiest way to fix this ".
|
||||
"is to add '/usr/local/bin' before '/usr/bin' for 'env_path' in ".
|
||||
"suconf.php:\n\n".
|
||||
' env_path="/bin:/usr/local/bin:/usr/bin"'.
|
||||
"\n\n");
|
||||
return;
|
||||
} else {
|
||||
self::write(" okay 'php' is CLI SAPI.\n");
|
||||
}
|
||||
}
|
||||
|
||||
$root = dirname(phutil_get_library_root('phabricator'));
|
||||
|
||||
// On RHEL6, doing a distro install of pcntl makes it available from the
|
||||
// CLI binary but not from the Apache module. This isn't entirely
|
||||
// unreasonable and we don't need it from Apache, so do an explicit test
|
||||
// for CLI availability.
|
||||
list($err, $stdout, $stderr) = exec_manual(
|
||||
'php %s',
|
||||
"{$root}/scripts/setup/pcntl_available.php");
|
||||
if ($err) {
|
||||
self::writeFailure();
|
||||
self::write("Unable to execute scripts/setup/pcntl_available.php to ".
|
||||
"test for the availability of pcntl from the CLI.\n".
|
||||
" err: {$err}\n".
|
||||
"stdout: {$stdout}\n".
|
||||
"stderr: {$stderr}\n");
|
||||
return;
|
||||
} else {
|
||||
if (trim($stdout) == 'YES') {
|
||||
self::write(" okay pcntl is available from the command line.\n");
|
||||
self::write("[OKAY] All extensions OKAY\n");
|
||||
} else {
|
||||
self::write(" warn pcntl is not available!\n");
|
||||
self::write("[WARN] *** WARNING *** pcntl extension not available. ".
|
||||
"You will not be able to run daemons.\n");
|
||||
}
|
||||
}
|
||||
|
||||
self::writeHeader("GIT SUBMODULES");
|
||||
if (!Filesystem::pathExists($root.'/.git')) {
|
||||
self::write(" skip Not a git clone.\n\n");
|
||||
|
|
Loading…
Reference in a new issue