Release 0.49
[awl.git] / docs / api / awl / Utilities / _AWLUtilities.php.html
blobc4f0638049dc2211abc0566ca0a697de2df66e07
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml">
4 <head>
5 <!-- template designed by Marco Von Ballmoos -->
6 <title>Docs for page AWLUtilities.php</title>
7 <link rel="stylesheet" href="../../media/stylesheet.css" />
8 <script src="../../media/lib/classTree.js"></script>
9 <script language="javascript" type="text/javascript">
10 var imgPlus = new Image();
11 var imgMinus = new Image();
12 imgPlus.src = "../../media/images/plus.png";
13 imgMinus.src = "../../media/images/minus.png";
15 function showNode(Node){
16 switch(navigator.family){
17 case 'nn4':
18 // Nav 4.x code fork...
19 var oTable = document.layers["span" + Node];
20 var oImg = document.layers["img" + Node];
21 break;
22 case 'ie4':
23 // IE 4/5 code fork...
24 var oTable = document.all["span" + Node];
25 var oImg = document.all["img" + Node];
26 break;
27 case 'gecko':
28 // Standards Compliant code fork...
29 var oTable = document.getElementById("span" + Node);
30 var oImg = document.getElementById("img" + Node);
31 break;
33 oImg.src = imgMinus.src;
34 oTable.style.display = "block";
37 function hideNode(Node){
38 switch(navigator.family){
39 case 'nn4':
40 // Nav 4.x code fork...
41 var oTable = document.layers["span" + Node];
42 var oImg = document.layers["img" + Node];
43 break;
44 case 'ie4':
45 // IE 4/5 code fork...
46 var oTable = document.all["span" + Node];
47 var oImg = document.all["img" + Node];
48 break;
49 case 'gecko':
50 // Standards Compliant code fork...
51 var oTable = document.getElementById("span" + Node);
52 var oImg = document.getElementById("img" + Node);
53 break;
55 oImg.src = imgPlus.src;
56 oTable.style.display = "none";
59 function nodeIsVisible(Node){
60 switch(navigator.family){
61 case 'nn4':
62 // Nav 4.x code fork...
63 var oTable = document.layers["span" + Node];
64 break;
65 case 'ie4':
66 // IE 4/5 code fork...
67 var oTable = document.all["span" + Node];
68 break;
69 case 'gecko':
70 // Standards Compliant code fork...
71 var oTable = document.getElementById("span" + Node);
72 break;
74 return (oTable && oTable.style.display == "block");
77 function toggleNodeVisibility(Node){
78 if (nodeIsVisible(Node)){
79 hideNode(Node);
80 }else{
81 showNode(Node);
84 </script>
85 </head>
86 <body>
87 <div class="page-body">
88 <h2 class="file-name"><img src="../../media/images/Page_logo.png" alt="File" style="vertical-align: middle">/AWLUtilities.php</h2>
90 <a name="sec-description"></a>
91 <div class="info-box">
92 <div class="info-box-title">Description</div>
93 <div class="nav-bar">
94 <span class="disabled">Description</span> |
95 <a href="#sec-includes">Includes</a>
96 | <a href="#sec-functions">Functions</a>
97 </div>
98 <div class="info-box-body">
99 <!-- ========== Info from phpDoc block ========= -->
100 <p class="short-description">Utility functions of a general nature which are used by most AWL library classes.</p>
101 <ul class="tags">
102 <li><span class="field">author:</span> Andrew McMillan &lt;<a href="mailto:andrew@mcmillan.net.nz">andrew@mcmillan.net.nz</a>&gt;</li>
103 <li><span class="field">copyright:</span> Catalyst IT Ltd, Morphoss Ltd &lt;http://www.morphoss.com/&gt;</li>
104 <li><span class="field">license:</span> <a href="http://www.gnu.org/licenses/lgpl-3.0.txt">GNU LGPL version 3 or later</a></li>
105 </ul>
107 </div>
108 </div>
111 <a name="sec-includes"></a>
112 <div class="info-box">
113 <div class="info-box-title">Includes</div>
114 <div class="nav-bar">
115 <a href="#sec-description">Description</a> |
116 <span class="disabled">Includes</span>
117 | <a href="#sec-functions">Functions</a>
118 </div>
119 <div class="info-box-body">
120 <a name="_Translation_php"><!-- --></a>
121 <div class="evenrow">
123 <div>
124 <img src="../../media/images/Page.png" alt=" " />
125 <span class="include-title">
126 <span class="include-type">require</span>
127 (<span class="include-name"><a href="../../awl/Translation/_Translation.php.html">"Translation.php"</a></span>)
128 (line <span class="line-number">367</span>)
129 </span>
130 </div>
132 <!-- ========== Info from phpDoc block ========= -->
134 </div>
135 </div>
136 </div>
140 <a name="sec-functions"></a>
141 <div class="info-box">
142 <div class="info-box-title">Functions</div>
143 <div class="nav-bar">
144 <a href="#sec-description">Description</a> |
145 <a href="#sec-includes">Includes</a>
146 | <span class="disabled">Functions</span>
147 </div>
148 <div class="info-box-body">
149 <a name="functionawl_version" id="functionawl_version"><!-- --></a>
150 <div class="oddrow">
152 <div>
153 <img src="../../media/images/Function.png" />
154 <span class="method-title">awl_version</span> (line <span class="line-number">675</span>)
155 </div>
157 <!-- ========== Info from phpDoc block ========= -->
158 <p class="short-description">Return the AWL version</p>
159 <div class="method-signature">
160 <span class="method-result">void</span>
161 <span class="method-name">
162 awl_version
163 </span>
165 </div>
169 </div>
170 <a name="functioncheck_by_regex" id="functioncheck_by_regex"><!-- --></a>
171 <div class="evenrow">
173 <div>
174 <img src="../../media/images/Function.png" />
175 <span class="method-title">check_by_regex</span> (line <span class="line-number">397</span>)
176 </div>
178 <!-- ========== Info from phpDoc block ========= -->
179 <p class="short-description">Verify a value is OK by testing a regex against it. If it is an array apply it to each element in the array recursively. If it is an object we don't mess with it.</p>
180 <div class="method-signature">
181 <span class="method-result">void</span>
182 <span class="method-name">
183 check_by_regex
184 </span>
185 (<span class="var-type"></span>&nbsp;<span class="var-name">$val</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$regex</span>)
186 </div>
188 <ul class="parameters">
189 <li>
190 <span class="var-type"></span>
191 <span class="var-name">$val</span> </li>
192 <li>
193 <span class="var-type"></span>
194 <span class="var-name">$regex</span> </li>
195 </ul>
198 </div>
199 <a name="functiondbg_error_log" id="functiondbg_error_log"><!-- --></a>
200 <div class="oddrow">
202 <div>
203 <img src="../../media/images/Function.png" />
204 <span class="method-title">dbg_error_log</span> (line <span class="line-number">27</span>)
205 </div>
207 <!-- ========== Info from phpDoc block ========= -->
208 <p class="short-description">Writes a debug message into the error log using printf syntax. If the first parameter is &quot;ERROR&quot; then the message will _always_ be logged.</p>
209 <p class="description"><p>Otherwise, the first parameter is a &quot;component&quot; name, and will only be logged if $c-&gt;dbg[&quot;component&quot;] is set to some non-null value.</p><p>If you want to see every log message then $c-&gt;dbg[&quot;ALL&quot;] can be set, to override the debugging status of the individual components.</p></p>
210 <ul class="tags">
211 <li><span class="field">var:</span> The component to identify itself, or &quot;ERROR&quot;, or &quot;LOG:component&quot;</li>
212 </ul>
213 <div class="method-signature">
214 <span class="method-result">void</span>
215 <span class="method-name">
216 dbg_error_log
217 </span>
219 </div>
223 </div>
224 <a name="functiondbg_log_array" id="functiondbg_log_array"><!-- --></a>
225 <div class="evenrow">
227 <div>
228 <img src="../../media/images/Function.png" />
229 <span class="method-title">dbg_log_array</span> (line <span class="line-number">151</span>)
230 </div>
232 <!-- ========== Info from phpDoc block ========= -->
233 <p class="short-description">Function to dump an array to the error log, possibly recursively</p>
234 <ul class="tags">
235 <li><span class="field">var:</span> Which component should this log message identify itself from</li>
236 </ul>
237 <div class="method-signature">
238 <span class="method-result">void</span>
239 <span class="method-name">
240 dbg_log_array
241 </span>
242 (<span class="var-type"></span>&nbsp;<span class="var-name">$component</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$name</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$arr</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$recursive</span> = <span class="var-default">false</span>])
243 </div>
245 <ul class="parameters">
246 <li>
247 <span class="var-type"></span>
248 <span class="var-name">$component</span> </li>
249 <li>
250 <span class="var-type"></span>
251 <span class="var-name">$name</span> </li>
252 <li>
253 <span class="var-type"></span>
254 <span class="var-name">$arr</span> </li>
255 <li>
256 <span class="var-type"></span>
257 <span class="var-name">$recursive</span> </li>
258 </ul>
261 </div>
262 <a name="functiondefine_byte_mappings" id="functiondefine_byte_mappings"><!-- --></a>
263 <div class="oddrow">
265 <div>
266 <img src="../../media/images/Function.png" />
267 <span class="method-title">define_byte_mappings</span> (line <span class="line-number">498</span>)
268 </div>
270 <!-- ========== Info from phpDoc block ========= -->
271 <div class="method-signature">
272 <span class="method-result">void</span>
273 <span class="method-name">
274 define_byte_mappings
275 </span>
277 </div>
281 </div>
282 <a name="functiondeprecated" id="functiondeprecated"><!-- --></a>
283 <div class="evenrow">
285 <div>
286 <img src="../../media/images/Function.png" />
287 <span class="method-title">deprecated</span> (line <span class="line-number">623</span>)
288 </div>
290 <!-- ========== Info from phpDoc block ========= -->
291 <div class="method-signature">
292 <span class="method-result">void</span>
293 <span class="method-name">
294 deprecated
295 </span>
296 (<span class="var-type"></span>&nbsp;<span class="var-name">$method</span>)
297 </div>
299 <ul class="parameters">
300 <li>
301 <span class="var-type"></span>
302 <span class="var-name">$method</span> </li>
303 </ul>
306 </div>
307 <a name="functionfatal" id="functionfatal"><!-- --></a>
308 <div class="oddrow">
310 <div>
311 <img src="../../media/images/Function.png" />
312 <span class="method-title">fatal</span> (line <span class="line-number">58</span>)
313 </div>
315 <!-- ========== Info from phpDoc block ========= -->
316 <div class="method-signature">
317 <span class="method-result">void</span>
318 <span class="method-name">
319 fatal
320 </span>
322 </div>
326 </div>
327 <a name="functionforce_utf8" id="functionforce_utf8"><!-- --></a>
328 <div class="evenrow">
330 <div>
331 <img src="../../media/images/Function.png" />
332 <span class="method-title">force_utf8</span> (line <span class="line-number">550</span>)
333 </div>
335 <!-- ========== Info from phpDoc block ========= -->
336 <div class="method-signature">
337 <span class="method-result">void</span>
338 <span class="method-name">
339 force_utf8
340 </span>
341 (<span class="var-type"></span>&nbsp;<span class="var-name">$input</span>)
342 </div>
344 <ul class="parameters">
345 <li>
346 <span class="var-type"></span>
347 <span class="var-name">$input</span> </li>
348 </ul>
351 </div>
352 <a name="functionget_fields" id="functionget_fields"><!-- --></a>
353 <div class="oddrow">
355 <div>
356 <img src="../../media/images/Function.png" />
357 <span class="method-title">get_fields</span> (line <span class="line-number">477</span>)
358 </div>
360 <!-- ========== Info from phpDoc block ========= -->
361 <p class="short-description">Get the names of the fields for a particular table</p>
362 <ul class="tags">
363 <li><span class="field">return:</span> of string The public fields in the table.</li>
364 </ul>
365 <div class="method-signature">
366 <span class="method-result">array</span>
367 <span class="method-name">
368 get_fields
369 </span>
370 (<span class="var-type">string</span>&nbsp;<span class="var-name">$tablename</span>)
371 </div>
373 <ul class="parameters">
374 <li>
375 <span class="var-type">string</span>
376 <span class="var-name">$tablename</span><span class="var-description">: The name of the table.</span> </li>
377 </ul>
380 </div>
381 <a name="functiongzdecode" id="functiongzdecode"><!-- --></a>
382 <div class="evenrow">
384 <div>
385 <img src="../../media/images/Function.png" />
386 <span class="method-title">gzdecode</span> (line <span class="line-number">639</span>)
387 </div>
389 <!-- ========== Info from phpDoc block ========= -->
390 <div class="method-signature">
391 <span class="method-result">void</span>
392 <span class="method-name">
393 gzdecode
394 </span>
395 (<span class="var-type"></span>&nbsp;<span class="var-name">$instring</span>)
396 </div>
398 <ul class="parameters">
399 <li>
400 <span class="var-type"></span>
401 <span class="var-name">$instring</span> </li>
402 </ul>
405 </div>
406 <a name="functionolson_from_tzstring" id="functionolson_from_tzstring"><!-- --></a>
407 <div class="oddrow">
409 <div>
410 <img src="../../media/images/Function.png" />
411 <span class="method-title">olson_from_tzstring</span> (line <span class="line-number">584</span>)
412 </div>
414 <!-- ========== Info from phpDoc block ========= -->
415 <p class="short-description">Try and extract something like &quot;Pacific/Auckland&quot; or &quot;America/Indiana/Indianapolis&quot; if possible.</p>
416 <div class="method-signature">
417 <span class="method-result">void</span>
418 <span class="method-name">
419 olson_from_tzstring
420 </span>
421 (<span class="var-type"></span>&nbsp;<span class="var-name">$tzstring</span>)
422 </div>
424 <ul class="parameters">
425 <li>
426 <span class="var-type"></span>
427 <span class="var-name">$tzstring</span> </li>
428 </ul>
431 </div>
432 <a name="functionparam_to_global" id="functionparam_to_global"><!-- --></a>
433 <div class="evenrow">
435 <div>
436 <img src="../../media/images/Function.png" />
437 <span class="method-title">param_to_global</span> (line <span class="line-number">431</span>)
438 </div>
440 <!-- ========== Info from phpDoc block ========= -->
441 <p class="short-description">Convert a parameter to a global. We first look in _POST and then in _GET, and if they passed in a bunch of valid characters, we will make sure the incoming is cleaned to only match that set.</p>
442 <div class="method-signature">
443 <span class="method-result">void</span>
444 <span class="method-name">
445 param_to_global
446 </span>
447 (<span class="var-type">string</span>&nbsp;<span class="var-name">$varname</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$match_regex</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$alias1</span>, <span class="var-type">"</span>&nbsp;<span class="var-name">3</span>)
448 </div>
450 <ul class="parameters">
451 <li>
452 <span class="var-type">string</span>
453 <span class="var-name">$varname</span><span class="var-description">: The name of the global variable to put the answer in</span> </li>
454 <li>
455 <span class="var-type">string</span>
456 <span class="var-name">$match_regex</span><span class="var-description">: The part of the parameter matching this regex will be returned</span> </li>
457 <li>
458 <span class="var-type">string</span>
459 <span class="var-name">$alias1</span><span class="var-description">: An alias for the name that we should look for first.</span> </li>
460 <li>
461 <span class="var-type">"</span>
462 <span class="var-name">3</span><span class="var-description">: ... More aliases, in the order which they should be examined. $varname will be appended to the end.</span> </li>
463 </ul>
466 </div>
467 <a name="functionquoted_printable_encode" id="functionquoted_printable_encode"><!-- --></a>
468 <div class="oddrow">
470 <div>
471 <img src="../../media/images/Function.png" />
472 <span class="method-title">quoted_printable_encode</span> (line <span class="line-number">385</span>)
473 </div>
475 <!-- ========== Info from phpDoc block ========= -->
476 <p class="short-description">Process a string to fit the requirements of RFC2045 section 6.7. Note that this works, but replaces more characters than the minimum set. For readability the spaces aren't encoded as =20 though.</p>
477 <div class="method-signature">
478 <span class="method-result">void</span>
479 <span class="method-name">
480 quoted_printable_encode
481 </span>
482 (<span class="var-type"></span>&nbsp;<span class="var-name">$string</span>)
483 </div>
485 <ul class="parameters">
486 <li>
487 <span class="var-type"></span>
488 <span class="var-name">$string</span> </li>
489 </ul>
492 </div>
493 <a name="functionreplace_uri_params" id="functionreplace_uri_params"><!-- --></a>
494 <div class="evenrow">
496 <div>
497 <img src="../../media/images/Function.png" />
498 <span class="method-title">replace_uri_params</span> (line <span class="line-number">296</span>)
499 </div>
501 <!-- ========== Info from phpDoc block ========= -->
502 <p class="short-description">Given a URL (presumably the current one) and a parameter, replace the value of parameter, extending the URL as necessary if the parameter is not already there.</p>
503 <ul class="tags">
504 <li><span class="field">return:</span> The URI with the replacements done.</li>
505 </ul>
506 <div class="method-signature">
507 <span class="method-result">string</span>
508 <span class="method-name">
509 replace_uri_params
510 </span>
511 (<span class="var-type">string</span>&nbsp;<span class="var-name">$uri</span>, <span class="var-type">array</span>&nbsp;<span class="var-name">$replacements</span>)
512 </div>
514 <ul class="parameters">
515 <li>
516 <span class="var-type">string</span>
517 <span class="var-name">$uri</span><span class="var-description">: The URI we will be replacing parameters in.</span> </li>
518 <li>
519 <span class="var-type">array</span>
520 <span class="var-name">$replacements</span><span class="var-description">: An array of replacement pairs array( &quot;replace_this&quot; =&gt; &quot;with this&quot; )</span> </li>
521 </ul>
524 </div>
525 <a name="functionsession_salted_md5" id="functionsession_salted_md5"><!-- --></a>
526 <div class="oddrow">
528 <div>
529 <img src="../../media/images/Function.png" />
530 <span class="method-title">session_salted_md5</span> (line <span class="line-number">194</span>)
531 </div>
533 <!-- ========== Info from phpDoc block ========= -->
534 <p class="short-description">Make a salted MD5 string, given a string and (possibly) a salt.</p>
535 <p class="description"><p>If no salt is supplied we will generate a random one.</p></p>
536 <ul class="tags">
537 <li><span class="field">return:</span> The salt, a * and the MD5 of the salted string, as in SALT*SALTEDHASH</li>
538 </ul>
539 <div class="method-signature">
540 <span class="method-result">string</span>
541 <span class="method-name">
542 session_salted_md5
543 </span>
544 (<span class="var-type">string</span>&nbsp;<span class="var-name">$instr</span>, [<span class="var-type">string</span>&nbsp;<span class="var-name">$salt</span> = <span class="var-default">&amp;quot;&amp;quot;</span>])
545 </div>
547 <ul class="parameters">
548 <li>
549 <span class="var-type">string</span>
550 <span class="var-name">$instr</span><span class="var-description">: The string to be salted and MD5'd</span> </li>
551 <li>
552 <span class="var-type">string</span>
553 <span class="var-name">$salt</span><span class="var-description">: Some salt to sprinkle into the string to be MD5'd so we don't get the same PW always hashing to the same value.</span> </li>
554 </ul>
557 </div>
558 <a name="functionsession_salted_sha1" id="functionsession_salted_sha1"><!-- --></a>
559 <div class="evenrow">
561 <div>
562 <img src="../../media/images/Function.png" />
563 <span class="method-title">session_salted_sha1</span> (line <span class="line-number">218</span>)
564 </div>
566 <!-- ========== Info from phpDoc block ========= -->
567 <p class="short-description">Make a salted SHA1 string, given a string and (possibly) a salt. PHP5 only (although it could be made to work on PHP4 (@see http://www.openldap.org/faq/data/cache/347.html). The algorithm used here is compatible with OpenLDAP so passwords generated through this function should be able to be migrated to OpenLDAP by using the part following the second '*', i.e.</p>
568 <p class="description"><p>the '{SSHA}....' part.</p><p>If no salt is supplied we will generate a random one.</p></p>
569 <ul class="tags">
570 <li><span class="field">return:</span> A *, the salt, a * and the SHA1 of the salted string, as in *SALT*SALTEDHASH</li>
571 </ul>
572 <div class="method-signature">
573 <span class="method-result">string</span>
574 <span class="method-name">
575 session_salted_sha1
576 </span>
577 (<span class="var-type">string</span>&nbsp;<span class="var-name">$instr</span>, [<span class="var-type">string</span>&nbsp;<span class="var-name">$salt</span> = <span class="var-default">&amp;quot;&amp;quot;</span>])
578 </div>
580 <ul class="parameters">
581 <li>
582 <span class="var-type">string</span>
583 <span class="var-name">$instr</span><span class="var-description">: The string to be salted and SHA1'd</span> </li>
584 <li>
585 <span class="var-type">string</span>
586 <span class="var-name">$salt</span><span class="var-description">: Some salt to sprinkle into the string to be SHA1'd so we don't get the same PW always hashing to the same value.</span> </li>
587 </ul>
590 </div>
591 <a name="functionsession_simple_md5" id="functionsession_simple_md5"><!-- --></a>
592 <div class="oddrow">
594 <div>
595 <img src="../../media/images/Function.png" />
596 <span class="method-title">session_simple_md5</span> (line <span class="line-number">175</span>)
597 </div>
599 <!-- ========== Info from phpDoc block ========= -->
600 <p class="short-description">Make a plain MD5 hash of a string, identifying the type of hash it is</p>
601 <ul class="tags">
602 <li><span class="field">return:</span> The *MD5* and the MD5 of the string</li>
603 </ul>
604 <div class="method-signature">
605 <span class="method-result">string</span>
606 <span class="method-name">
607 session_simple_md5
608 </span>
609 (<span class="var-type">string</span>&nbsp;<span class="var-name">$instr</span>)
610 </div>
612 <ul class="parameters">
613 <li>
614 <span class="var-type">string</span>
615 <span class="var-name">$instr</span><span class="var-description">: The string to be salted and MD5'd</span> </li>
616 </ul>
619 </div>
620 <a name="functionsession_validate_password" id="functionsession_validate_password"><!-- --></a>
621 <div class="evenrow">
623 <div>
624 <img src="../../media/images/Function.png" />
625 <span class="method-title">session_validate_password</span> (line <span class="line-number">234</span>)
626 </div>
628 <!-- ========== Info from phpDoc block ========= -->
629 <p class="short-description">Checks what a user entered against the actual password on their account.</p>
630 <ul class="tags">
631 <li><span class="field">return:</span> Whether or not the users attempt matches what is already on file.</li>
632 </ul>
633 <div class="method-signature">
634 <span class="method-result">boolean</span>
635 <span class="method-name">
636 session_validate_password
637 </span>
638 (<span class="var-type">string</span>&nbsp;<span class="var-name">$they_sent</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$we_have</span>)
639 </div>
641 <ul class="parameters">
642 <li>
643 <span class="var-type">string</span>
644 <span class="var-name">$they_sent</span><span class="var-description">: What the user entered.</span> </li>
645 <li>
646 <span class="var-type">string</span>
647 <span class="var-name">$we_have</span><span class="var-description">: What we have in the database as their password. Which may (or may not) be a salted MD5.</span> </li>
648 </ul>
651 </div>
652 <a name="functiontrace_bug" id="functiontrace_bug"><!-- --></a>
653 <div class="oddrow">
655 <div>
656 <img src="../../media/images/Function.png" />
657 <span class="method-title">trace_bug</span> (line <span class="line-number">93</span>)
658 </div>
660 <!-- ========== Info from phpDoc block ========= -->
661 <p class="short-description">Not as sever as a fatal() call, but we want to log and trace it</p>
662 <div class="method-signature">
663 <span class="method-result">void</span>
664 <span class="method-name">
665 trace_bug
666 </span>
668 </div>
672 </div>
673 <a name="functionuuid" id="functionuuid"><!-- --></a>
674 <div class="evenrow">
676 <div>
677 <img src="../../media/images/Function.png" />
678 <span class="method-title">uuid</span> (line <span class="line-number">349</span>)
679 </div>
681 <!-- ========== Info from phpDoc block ========= -->
682 <p class="short-description">Generates a Universally Unique IDentifier, version 4.</p>
683 <p class="description"><p>RFC 4122 (http://www.ietf.org/rfc/rfc4122.txt) defines a special type of Globally Unique IDentifiers (GUID), as well as several methods for producing them. One such method, described in section 4.4, is based on truly random or pseudo-random number generators, and is therefore implementable in a language like PHP.</p><p>We choose to produce pseudo-random numbers with the Mersenne Twister, and to always limit single generated numbers to 16 bits (ie. the decimal value 65535). That is because, even on 32-bit systems, PHP's RAND_MAX will often be the maximum *signed* value, with only the equivalent of 31 significant bits. Producing two 16-bit random numbers to make up a 32-bit one is less efficient, but guarantees that all 32 bits are random.</p><p>The algorithm for version 4 UUIDs (ie. those based on random number generators) states that all 128 bits separated into the various fields (32 bits, 16 bits, 16 bits, 8 bits and 8 bits, 48 bits) should be random, except : (a) the version number should be the last 4 bits in the 3rd field, and (b) bits 6 and 7 of the 4th field should be 01. We try to conform to that definition as efficiently as possible, generating smaller values where possible, and minimizing the number of base conversions.</p></p>
684 <ul class="tags">
685 <li><span class="field">return:</span> A UUID, made up of 32 hex digits and 4 hyphens.</li>
686 <li><span class="field">author:</span> David Holmes &lt;<a href="mailto:dholmes@cfdsoftware.net">dholmes@cfdsoftware.net</a>&gt;</li>
687 <li><span class="field">copyright:</span> Copyright (c) CFD Labs, 2006. This function may be used freely for any purpose ; it is distributed without any form of warranty whatsoever.</li>
688 </ul>
689 <div class="method-signature">
690 <span class="method-result">string</span>
691 <span class="method-name">
692 uuid
693 </span>
695 </div>
699 </div>
700 </div>
701 </div>
703 <p class="notes" id="credit">
704 Documentation generated on Mon, 24 Oct 2011 20:10:10 +1300 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
705 </p>
706 </div></body>
707 </html>