mirror of
https://github.com/php/web-php.git
synced 2026-03-23 23:02:13 +01:00
137 lines
3.8 KiB
PHP
137 lines
3.8 KiB
PHP
<?php
|
|
/*
|
|
|
|
This page is either directly called from the browser, in
|
|
which case it will always show the full list of "functions"
|
|
in the user's preferred language version of the PHP
|
|
documentation.
|
|
|
|
In other cases this file is included from manual-lookup.php,
|
|
which sets $notfound, so we know what function to search for,
|
|
and display results for that search.
|
|
|
|
*/
|
|
|
|
// Ensure that our environment is set up
|
|
$_SERVER['BASE_PAGE'] = 'quickref.php';
|
|
include_once __DIR__ . '/include/prepend.inc';
|
|
include_once __DIR__ . '/include/errors.inc';
|
|
|
|
if (empty($notfound)) {
|
|
mirror_redirect("/search.php");
|
|
}
|
|
|
|
// Print out the table of found (or all) functions. The HTML comments are
|
|
// needed to support MyCroft search (Mozilla browser family and Sherlock for MacOSX)
|
|
function quickref_table($functions, $sort = true): void
|
|
{
|
|
global $LANG;
|
|
|
|
echo "<!-- result list start -->\n";
|
|
echo "<ul id=\"quickref_functions\">\n";
|
|
// Prepare the data
|
|
if ($sort) {
|
|
asort($functions);
|
|
}
|
|
|
|
// Print out all rows
|
|
foreach ($functions as $file => $name) {
|
|
echo "<li><a href=\"/manual/$LANG/$file\">$name</a></li>\n";
|
|
}
|
|
echo "</ul>\n";
|
|
echo "<!-- result list end -->\n";
|
|
}
|
|
|
|
// Open directory, fall back to English,
|
|
// if there is no dir for that language
|
|
$dirh = @opendir($_SERVER['DOCUMENT_ROOT'] . "/manual/$LANG");
|
|
if (!$dirh) {
|
|
error_noservice();
|
|
}
|
|
|
|
$functions = $maybe = $temp = $parts = [];
|
|
$p = 0;
|
|
|
|
// Get all file names from the directory
|
|
while (($entry = readdir($dirh)) !== false) {
|
|
|
|
// Skip names starting with a dot
|
|
if (substr($entry, 0, 1) == ".") { continue; }
|
|
|
|
// For function and class pages, get the name out
|
|
if (preg_match('!^(function|class)\.(.+)\.php$!', $entry, $parts)) {
|
|
$funcname = str_replace('-', '_', $parts[2]);
|
|
$functions[$entry] = $funcname;
|
|
|
|
// Compute similarity of the name to the requested one
|
|
if (function_exists('similar_text') && !empty($notfound)) {
|
|
similar_text($funcname, $notfound, $p);
|
|
|
|
// If $notfound is a substring of $funcname then overwrite the score
|
|
// similar_text() gave it.
|
|
if ($p < 70 && ($pos = strpos($funcname, $notfound)) !== false) {
|
|
$p = 90 - $pos;
|
|
}
|
|
$temp[$entry] = $p;
|
|
}
|
|
}
|
|
}
|
|
closedir($dirh);
|
|
|
|
// We have found file names
|
|
if (count($temp) > 0) {
|
|
|
|
// Sort names by percentage
|
|
arsort($temp);
|
|
|
|
// Collect SHOW_CLOSE number of names from the top
|
|
foreach ($temp as $file => $p) {
|
|
|
|
// Stop, if we found enough matches
|
|
if (count($maybe) >= 30) { break; }
|
|
|
|
// If the two are more then 70% similar or $notfound is a substring
|
|
// of $funcname, then the match is a very similar one
|
|
if ($p >= 70 || (strpos($functions[$file], $notfound) !== false)) {
|
|
$maybe[$file] = '<b>' . $functions[$file] . '</b>';
|
|
}
|
|
// Otherwise it is just similar
|
|
else {
|
|
$maybe[$file] = $functions[$file];
|
|
}
|
|
}
|
|
unset($matches, $temp);
|
|
}
|
|
|
|
// Do not index page if presented as a search result
|
|
if (count($maybe) > 0) { $head_options = ["noindex"]; }
|
|
else { $head_options = []; }
|
|
|
|
site_header("Manual Quick Reference", $head_options + ["current" => "help"]);
|
|
|
|
// Note: $notfound is defined (with htmlspecialchars) inside manual-lookup.php
|
|
$notfound_enc = urlencode($notfound);
|
|
|
|
if ($snippet = is_known_snippet($notfound)) {
|
|
echo "<h1>Related snippet found for '{$notfound}'</h1>";
|
|
echo "<p>{$snippet}</p>";
|
|
}
|
|
|
|
?>
|
|
|
|
<h1>PHP Function List</h1>
|
|
|
|
<?php if (!empty($notfound) && count($maybe) > 0) { ?>
|
|
|
|
<p>
|
|
<b><?php echo $notfound; ?></b> doesn't exist. Closest matches:
|
|
</p>
|
|
|
|
<?php
|
|
quickref_table($maybe, false);
|
|
|
|
site_footer([
|
|
"sidebar" => '<p class="panel"><a href="/search.php?show=all&pattern=' . $notfound_enc . '">Full website search</a>',
|
|
]);
|
|
}
|