forked from php/web-php
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquickref.php
199 lines (160 loc) · 5.72 KB
/
quickref.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<?php
// $Id$
/*
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 $_SERVER['DOCUMENT_ROOT'] . '/include/prepend.inc';
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/errors.inc';
include $_SERVER['DOCUMENT_ROOT'] . '/include/results.inc';
// Constant values for the display
define("COLUMNS", 4);
define("SHOW_CLOSE", 20);
// Set empty $notfound if called directly
if (!isset($notfound)) {
$notfound = '';
}
if (!isset($scope)) {
$scope = '';
}
// 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)
{
global $LANG;
echo "<!-- result list start -->\n";
echo "<table border=\"0\" cellpadding=\"5\" cellspacing=\"0\" width=\"100%\">\n";
echo "<tr valign=\"top\"><td>\n";
// Prepare the data
$i = 0;
$limit = ceil(count($functions) / COLUMNS);
if ($sort) {
asort($functions);
}
// Print out all rows
foreach ($functions as $file => $name) {
// Start a new column
if ($i > 0 && $i % $limit==0) {
echo "</td><td>\n";
}
echo "<a href=\"/manual/$LANG/$file\">$name</a><br />\n";
$i++;
}
echo "</td></tr></table>\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 = array();
$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) >= SHOW_CLOSE) { 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 = array("noindex"); }
else { $head_options = array(); }
site_header("Manual Quick Reference", $head_options+array("current" => "docs"));
$notfound_sc = htmlspecialchars($notfound, ENT_QUOTES, 'UTF-8');
$notfound_enc = urlencode($notfound_sc);
?>
<h1>PHP Function List</h1>
<?php if (!empty($notfound) && count($maybe) > 0) { ?>
<p>
<b><?php echo $notfound_sc; ?></b> doesn't exist. Closest matches:
</p>
<?php quickref_table($maybe, false); ?>
<?php
// Don't do a web search if the search term contains:
// tp:// since we are seeing a lot of proxy attempts through the 404 handler
// admin/ since these tend to be script-kiddie hack attempts
if(strlen($notfound) > 2 && !strstr($notfound,'tp://') && !strstr($notfound,'admin/')):
$srch_rqst = "/ws.php?profile=$scope&q=".urlencode($notfound)."&lang=$LANG&results=10&start=0&mirror=".trim(substr($MYSITE,7),'/');
$url = "http://www.php.net".$srch_rqst;
$data = fetch_contents($url);
if(!is_array($data)) {
$res = unserialize($data);
if(is_array($res) && $res['ResultSet']['totalResultsAvailable'] > 0) {
// Ok, we got some results from the search backend
echo "<br /><h1>Site Search Results</h1>\n";
search_results($res, $notfound, 'local', 10, 0, $LANG, false, false, true);
echo '<br clear="left"/>';
}
}
endif;
?>
<h1>Other forms of search</h1>
<p>
To search the string "<b><?php echo $notfound_sc; ?></b>" using other options, try searching:
</p>
<ul>
<li><?php print_link('search.php?show=manual&pattern=' . $notfound_enc, 'Only the documentation'); ?></li>
<li><?php print_link('search.php?show=local&pattern=' . $notfound_enc, 'Only this mirror'); ?></li>
<li><?php print_link('search.php?show=wholesite&pattern=' . $notfound_enc, 'The entire php.net domain'); ?></li>
</ul>
<p>
For a quick overview over all documented PHP functions,
<?php print_link('quickref.php', 'click here'); ?>.
</p>
<?php
site_footer();
exit;
}
?>
<p>
Here is a list of all the documented PHP functions.
Click on any one of them to jump to that page in the
manual.
</p>
<?php
quickref_table($functions);
site_footer();
?>