mirror of
				https://github.com/Mibew/java.git
				synced 2025-10-31 10:31:07 +03:00 
			
		
		
		
	Few things changed per page, Features: Added 1.6.1
config: added mysql connect Access denied: Changed format member-profile: still working on it, the form part is up now though git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@539 c66351dc-e62f-0410-b875-e3a5c0b9693f
This commit is contained in:
		
							parent
							
								
									1041503502
								
							
						
					
					
						commit
						10b3caf238
					
				| @ -6,9 +6,8 @@ | ||||
| <link href="loginmodule.css" rel="stylesheet" type="text/css" /> | ||||
| </head> | ||||
| <body> | ||||
| <h1>Access Denied </h1> | ||||
| <p align="center"> </p> | ||||
| <h4 align="center" class="err">Access Denied!<br /> | ||||
| <h1 align="center" class="err">Access Denied!<br /> | ||||
|   You do not have access to this resource.</h4> | ||||
| </body> | ||||
| </html> | ||||
|  | ||||
| @ -1,2 +1,2 @@ | ||||
| <? require('libs/menu.php'); ?>
 | ||||
| <p>Get your copy of Mibew 1.6.1 at <b > <a href="http://sourceforge.net/project/showfiles.php?group_id=195701&package_id=231073">Download Here</a> | ||||
| <p>Get your copy of Mibew 1.6.1 at <b > <a href="http://sourceforge.net/project/showfiles.php?group_id=195701&package_id=231073">Download Here</a></p> | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| <? require('libs/menu.php'); ?>
<p> </p>
<p><b><font color="#99CC00">Version 1.6.0 Released</font></b></p>
<p>We are pleased to announce the immediate availability of 1.6.0. This is a major release with new features and improvements.</p>
<dl>
    <dd>* operator groups</dd>
    <dd>* pre-chat survey</dd>
    <dd>* statistics</dd>
    <dd>* canned messages</dd>
    <dd>* new operator console</dd>
 | ||||
| <? require('libs/menu.php'); ?>
<p> </p>
<b><font color="#99CC00">Version 1.6.1 Released</font></b></p>
<p>We are pleased to announce the immediate availability of 1.6.1. This is a major release with new features and improvements.</p>
<p><dd>[!] 404 installation problem</dd><p></p>
<dd>new permission: "Ability to modify profile"</dd><p></p>
<dd>new project name: Mibew Messenger </dd><p></p>
<dd>[!] fixed localization of dates for all languages, nice formatting: Today/Yesterday</dd><p></p>
<dd>[!] fixed online/offline image for groups</dd><p></p>
<dd>ability to delete operators, confirmation dialog when deleting group/operator/blocked address </dd><p></p>
<dd>Information about last activity for operators: Online, Today at 22, 01 Jan.., or Never </dd><p></p>
<dd>new theme: simplicity (by Sheldmandu) </dd><p></p>
<dd>[!] chat templates are fixed according to html standards </dd><p></p>
<b><font color="#99CC00">Version 1.6.0 Released</font></b></p>
<p>We are pleased to announce the immediate availability of 1.6.0. This is a major release with new features and improvements.</p>
<dl>
    <dd>* operator groups</dd>
    <dd>* pre-chat survey</dd>
    <dd>* statistics</dd>
    <dd>* canned messages</dd>
    <dd>* new operator console</dd>
 | ||||
| @ -3,4 +3,15 @@ | ||||
|     define('DB_USER', 'root'); | ||||
|     define('DB_PASSWORD', ''); | ||||
|     define('DB_DATABASE', 'mibew'); | ||||
|     //Connect to mysql server
 | ||||
| 	mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); | ||||
| 	if(!$link) { | ||||
| 		die('Failed to connect to server: ' . mysql_error()); | ||||
| 	} | ||||
| 
 | ||||
| 	//Select database
 | ||||
| 	$db = mysql_select_db(DB_DATABASE); | ||||
| 	if(!$db) { | ||||
| 		die("Unable to select database"); | ||||
| 	} | ||||
| ?>
 | ||||
| @ -1,8 +1,29 @@ | ||||
| <?php | ||||
| 	require_once('auth.php'); | ||||
| 	require('libs/menu.php'); | ||||
|     require('libs/config.php'); | ||||
|   $_POST['email'] | ||||
| ?>
 | ||||
| 
 | ||||
| <p><b><font color=red>Under Construction</font></b> </p> | ||||
| </body> | ||||
| </html> | ||||
| <table width="300" border="0" align="center" cellpadding="2" cellspacing="0"> | ||||
|     <tr> | ||||
|       <th>First Name </th> | ||||
|       <td><input name="$fname" type="text" class="textfield" id="fname" /></td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|       <th>Last Name </th> | ||||
|       <td><input name="$lname" type="text" class="textfield" id="lname" /></td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|       <th>City </th> | ||||
|       <td><input name="$city" type="text" class="textfield" id="lname" /></td> | ||||
|     </tr><tr> | ||||
|       <th>State </th> | ||||
|       <td><input name="$state" type="text" class="textfield" id="lname" /></td> | ||||
|     </tr><tr> | ||||
|       <th>Country </th> | ||||
|       <td><input name="$country" type="text" class="textfield" id="lname" /></td> | ||||
|     </tr><tr> | ||||
|       <th>Email </th> | ||||
|       <td><input name="$email" type="text" class="textfield" id="lname" /></td> | ||||
|     </tr> | ||||
|  | ||||
| @ -1,458 +0,0 @@ | ||||
| 		  GNU LESSER GENERAL PUBLIC LICENSE | ||||
| 		       Version 2.1, February 1999 | ||||
| 
 | ||||
|  Copyright (C) 1991, 1999 Free Software Foundation, Inc. | ||||
|      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
|  Everyone is permitted to copy and distribute verbatim copies | ||||
|  of this license document, but changing it is not allowed. | ||||
| 
 | ||||
| [This is the first released version of the Lesser GPL.  It also counts | ||||
|  as the successor of the GNU Library Public License, version 2, hence | ||||
|  the version number 2.1.] | ||||
| 
 | ||||
| 			    Preamble | ||||
| 
 | ||||
|   The licenses for most software are designed to take away your | ||||
| freedom to share and change it.  By contrast, the GNU General Public | ||||
| Licenses are intended to guarantee your freedom to share and change | ||||
| free software--to make sure the software is free for all its users. | ||||
| 
 | ||||
|   This license, the Lesser General Public License, applies to some | ||||
| specially designated software packages--typically libraries--of the | ||||
| Free Software Foundation and other authors who decide to use it.  You | ||||
| can use it too, but we suggest you first think carefully about whether | ||||
| this license or the ordinary General Public License is the better | ||||
| strategy to use in any particular case, based on the explanations below. | ||||
| 
 | ||||
|   When we speak of free software, we are referring to freedom of use, | ||||
| not price.  Our General Public Licenses are designed to make sure that | ||||
| you have the freedom to distribute copies of free software (and charge | ||||
| for this service if you wish); that you receive source code or can get | ||||
| it if you want it; that you can change the software and use pieces of | ||||
| it in new free programs; and that you are informed that you can do | ||||
| these things. | ||||
| 
 | ||||
|   To protect your rights, we need to make restrictions that forbid | ||||
| distributors to deny you these rights or to ask you to surrender these | ||||
| rights.  These restrictions translate to certain responsibilities for | ||||
| you if you distribute copies of the library or if you modify it. | ||||
| 
 | ||||
|   For example, if you distribute copies of the library, whether gratis | ||||
| or for a fee, you must give the recipients all the rights that we gave | ||||
| you.  You must make sure that they, too, receive or can get the source | ||||
| code.  If you link other code with the library, you must provide | ||||
| complete object files to the recipients, so that they can relink them | ||||
| with the library after making changes to the library and recompiling | ||||
| it.  And you must show them these terms so they know their rights. | ||||
| 
 | ||||
|   We protect your rights with a two-step method: (1) we copyright the | ||||
| library, and (2) we offer you this license, which gives you legal | ||||
| permission to copy, distribute and/or modify the library. | ||||
| 
 | ||||
|   To protect each distributor, we want to make it very clear that | ||||
| there is no warranty for the free library.  Also, if the library is | ||||
| modified by someone else and passed on, the recipients should know | ||||
| that what they have is not the original version, so that the original | ||||
| author's reputation will not be affected by problems that might be | ||||
| introduced by others. | ||||
|  | ||||
|   Finally, software patents pose a constant threat to the existence of | ||||
| any free program.  We wish to make sure that a company cannot | ||||
| effectively restrict the users of a free program by obtaining a | ||||
| restrictive license from a patent holder.  Therefore, we insist that | ||||
| any patent license obtained for a version of the library must be | ||||
| consistent with the full freedom of use specified in this license. | ||||
| 
 | ||||
|   Most GNU software, including some libraries, is covered by the | ||||
| ordinary GNU General Public License.  This license, the GNU Lesser | ||||
| General Public License, applies to certain designated libraries, and | ||||
| is quite different from the ordinary General Public License.  We use | ||||
| this license for certain libraries in order to permit linking those | ||||
| libraries into non-free programs. | ||||
| 
 | ||||
|   When a program is linked with a library, whether statically or using | ||||
| a shared library, the combination of the two is legally speaking a | ||||
| combined work, a derivative of the original library.  The ordinary | ||||
| General Public License therefore permits such linking only if the | ||||
| entire combination fits its criteria of freedom.  The Lesser General | ||||
| Public License permits more lax criteria for linking other code with | ||||
| the library. | ||||
| 
 | ||||
|   We call this license the "Lesser" General Public License because it | ||||
| does Less to protect the user's freedom than the ordinary General | ||||
| Public License.  It also provides other free software developers Less | ||||
| of an advantage over competing non-free programs.  These disadvantages | ||||
| are the reason we use the ordinary General Public License for many | ||||
| libraries.  However, the Lesser license provides advantages in certain | ||||
| special circumstances. | ||||
| 
 | ||||
|   For example, on rare occasions, there may be a special need to | ||||
| encourage the widest possible use of a certain library, so that it becomes | ||||
| a de-facto standard.  To achieve this, non-free programs must be | ||||
| allowed to use the library.  A more frequent case is that a free | ||||
| library does the same job as widely used non-free libraries.  In this | ||||
| case, there is little to gain by limiting the free library to free | ||||
| software only, so we use the Lesser General Public License. | ||||
| 
 | ||||
|   In other cases, permission to use a particular library in non-free | ||||
| programs enables a greater number of people to use a large body of | ||||
| free software.  For example, permission to use the GNU C Library in | ||||
| non-free programs enables many more people to use the whole GNU | ||||
| operating system, as well as its variant, the GNU/Linux operating | ||||
| system. | ||||
| 
 | ||||
|   Although the Lesser General Public License is Less protective of the | ||||
| users' freedom, it does ensure that the user of a program that is | ||||
| linked with the Library has the freedom and the wherewithal to run | ||||
| that program using a modified version of the Library. | ||||
| 
 | ||||
|   The precise terms and conditions for copying, distribution and | ||||
| modification follow.  Pay close attention to the difference between a | ||||
| "work based on the library" and a "work that uses the library".  The | ||||
| former contains code derived from the library, whereas the latter must | ||||
| be combined with the library in order to run. | ||||
|  | ||||
| 		  GNU LESSER GENERAL PUBLIC LICENSE | ||||
|    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||
| 
 | ||||
|   0. This License Agreement applies to any software library or other | ||||
| program which contains a notice placed by the copyright holder or | ||||
| other authorized party saying it may be distributed under the terms of | ||||
| this Lesser General Public License (also called "this License"). | ||||
| Each licensee is addressed as "you". | ||||
| 
 | ||||
|   A "library" means a collection of software functions and/or data | ||||
| prepared so as to be conveniently linked with application programs | ||||
| (which use some of those functions and data) to form executables. | ||||
| 
 | ||||
|   The "Library", below, refers to any such software library or work | ||||
| which has been distributed under these terms.  A "work based on the | ||||
| Library" means either the Library or any derivative work under | ||||
| copyright law: that is to say, a work containing the Library or a | ||||
| portion of it, either verbatim or with modifications and/or translated | ||||
| straightforwardly into another language.  (Hereinafter, translation is | ||||
| included without limitation in the term "modification".) | ||||
| 
 | ||||
|   "Source code" for a work means the preferred form of the work for | ||||
| making modifications to it.  For a library, complete source code means | ||||
| all the source code for all modules it contains, plus any associated | ||||
| interface definition files, plus the scripts used to control compilation | ||||
| and installation of the library. | ||||
| 
 | ||||
|   Activities other than copying, distribution and modification are not | ||||
| covered by this License; they are outside its scope.  The act of | ||||
| running a program using the Library is not restricted, and output from | ||||
| such a program is covered only if its contents constitute a work based | ||||
| on the Library (independent of the use of the Library in a tool for | ||||
| writing it).  Whether that is true depends on what the Library does | ||||
| and what the program that uses the Library does. | ||||
| 
 | ||||
|   1. You may copy and distribute verbatim copies of the Library's | ||||
| complete source code as you receive it, in any medium, provided that | ||||
| you conspicuously and appropriately publish on each copy an | ||||
| appropriate copyright notice and disclaimer of warranty; keep intact | ||||
| all the notices that refer to this License and to the absence of any | ||||
| warranty; and distribute a copy of this License along with the | ||||
| Library. | ||||
| 
 | ||||
|   You may charge a fee for the physical act of transferring a copy, | ||||
| and you may at your option offer warranty protection in exchange for a | ||||
| fee. | ||||
|  | ||||
|   2. You may modify your copy or copies of the Library or any portion | ||||
| of it, thus forming a work based on the Library, and copy and | ||||
| distribute such modifications or work under the terms of Section 1 | ||||
| above, provided that you also meet all of these conditions: | ||||
| 
 | ||||
|     a) The modified work must itself be a software library. | ||||
| 
 | ||||
|     b) You must cause the files modified to carry prominent notices | ||||
|     stating that you changed the files and the date of any change. | ||||
| 
 | ||||
|     c) You must cause the whole of the work to be licensed at no | ||||
|     charge to all third parties under the terms of this License. | ||||
| 
 | ||||
|     d) If a facility in the modified Library refers to a function or a | ||||
|     table of data to be supplied by an application program that uses | ||||
|     the facility, other than as an argument passed when the facility | ||||
|     is invoked, then you must make a good faith effort to ensure that, | ||||
|     in the event an application does not supply such function or | ||||
|     table, the facility still operates, and performs whatever part of | ||||
|     its purpose remains meaningful. | ||||
| 
 | ||||
|     (For example, a function in a library to compute square roots has | ||||
|     a purpose that is entirely well-defined independent of the | ||||
|     application.  Therefore, Subsection 2d requires that any | ||||
|     application-supplied function or table used by this function must | ||||
|     be optional: if the application does not supply it, the square | ||||
|     root function must still compute square roots.) | ||||
| 
 | ||||
| These requirements apply to the modified work as a whole.  If | ||||
| identifiable sections of that work are not derived from the Library, | ||||
| and can be reasonably considered independent and separate works in | ||||
| themselves, then this License, and its terms, do not apply to those | ||||
| sections when you distribute them as separate works.  But when you | ||||
| distribute the same sections as part of a whole which is a work based | ||||
| on the Library, the distribution of the whole must be on the terms of | ||||
| this License, whose permissions for other licensees extend to the | ||||
| entire whole, and thus to each and every part regardless of who wrote | ||||
| it. | ||||
| 
 | ||||
| Thus, it is not the intent of this section to claim rights or contest | ||||
| your rights to work written entirely by you; rather, the intent is to | ||||
| exercise the right to control the distribution of derivative or | ||||
| collective works based on the Library. | ||||
| 
 | ||||
| In addition, mere aggregation of another work not based on the Library | ||||
| with the Library (or with a work based on the Library) on a volume of | ||||
| a storage or distribution medium does not bring the other work under | ||||
| the scope of this License. | ||||
| 
 | ||||
|   3. You may opt to apply the terms of the ordinary GNU General Public | ||||
| License instead of this License to a given copy of the Library.  To do | ||||
| this, you must alter all the notices that refer to this License, so | ||||
| that they refer to the ordinary GNU General Public License, version 2, | ||||
| instead of to this License.  (If a newer version than version 2 of the | ||||
| ordinary GNU General Public License has appeared, then you can specify | ||||
| that version instead if you wish.)  Do not make any other change in | ||||
| these notices. | ||||
|  | ||||
|   Once this change is made in a given copy, it is irreversible for | ||||
| that copy, so the ordinary GNU General Public License applies to all | ||||
| subsequent copies and derivative works made from that copy. | ||||
| 
 | ||||
|   This option is useful when you wish to copy part of the code of | ||||
| the Library into a program that is not a library. | ||||
| 
 | ||||
|   4. You may copy and distribute the Library (or a portion or | ||||
| derivative of it, under Section 2) in object code or executable form | ||||
| under the terms of Sections 1 and 2 above provided that you accompany | ||||
| it with the complete corresponding machine-readable source code, which | ||||
| must be distributed under the terms of Sections 1 and 2 above on a | ||||
| medium customarily used for software interchange. | ||||
| 
 | ||||
|   If distribution of object code is made by offering access to copy | ||||
| from a designated place, then offering equivalent access to copy the | ||||
| source code from the same place satisfies the requirement to | ||||
| distribute the source code, even though third parties are not | ||||
| compelled to copy the source along with the object code. | ||||
| 
 | ||||
|   5. A program that contains no derivative of any portion of the | ||||
| Library, but is designed to work with the Library by being compiled or | ||||
| linked with it, is called a "work that uses the Library".  Such a | ||||
| work, in isolation, is not a derivative work of the Library, and | ||||
| therefore falls outside the scope of this License. | ||||
| 
 | ||||
|   However, linking a "work that uses the Library" with the Library | ||||
| creates an executable that is a derivative of the Library (because it | ||||
| contains portions of the Library), rather than a "work that uses the | ||||
| library".  The executable is therefore covered by this License. | ||||
| Section 6 states terms for distribution of such executables. | ||||
| 
 | ||||
|   When a "work that uses the Library" uses material from a header file | ||||
| that is part of the Library, the object code for the work may be a | ||||
| derivative work of the Library even though the source code is not. | ||||
| Whether this is true is especially significant if the work can be | ||||
| linked without the Library, or if the work is itself a library.  The | ||||
| threshold for this to be true is not precisely defined by law. | ||||
| 
 | ||||
|   If such an object file uses only numerical parameters, data | ||||
| structure layouts and accessors, and small macros and small inline | ||||
| functions (ten lines or less in length), then the use of the object | ||||
| file is unrestricted, regardless of whether it is legally a derivative | ||||
| work.  (Executables containing this object code plus portions of the | ||||
| Library will still fall under Section 6.) | ||||
| 
 | ||||
|   Otherwise, if the work is a derivative of the Library, you may | ||||
| distribute the object code for the work under the terms of Section 6. | ||||
| Any executables containing that work also fall under Section 6, | ||||
| whether or not they are linked directly with the Library itself. | ||||
|  | ||||
|   6. As an exception to the Sections above, you may also combine or | ||||
| link a "work that uses the Library" with the Library to produce a | ||||
| work containing portions of the Library, and distribute that work | ||||
| under terms of your choice, provided that the terms permit | ||||
| modification of the work for the customer's own use and reverse | ||||
| engineering for debugging such modifications. | ||||
| 
 | ||||
|   You must give prominent notice with each copy of the work that the | ||||
| Library is used in it and that the Library and its use are covered by | ||||
| this License.  You must supply a copy of this License.  If the work | ||||
| during execution displays copyright notices, you must include the | ||||
| copyright notice for the Library among them, as well as a reference | ||||
| directing the user to the copy of this License.  Also, you must do one | ||||
| of these things: | ||||
| 
 | ||||
|     a) Accompany the work with the complete corresponding | ||||
|     machine-readable source code for the Library including whatever | ||||
|     changes were used in the work (which must be distributed under | ||||
|     Sections 1 and 2 above); and, if the work is an executable linked | ||||
|     with the Library, with the complete machine-readable "work that | ||||
|     uses the Library", as object code and/or source code, so that the | ||||
|     user can modify the Library and then relink to produce a modified | ||||
|     executable containing the modified Library.  (It is understood | ||||
|     that the user who changes the contents of definitions files in the | ||||
|     Library will not necessarily be able to recompile the application | ||||
|     to use the modified definitions.) | ||||
| 
 | ||||
|     b) Use a suitable shared library mechanism for linking with the | ||||
|     Library.  A suitable mechanism is one that (1) uses at run time a | ||||
|     copy of the library already present on the user's computer system, | ||||
|     rather than copying library functions into the executable, and (2) | ||||
|     will operate properly with a modified version of the library, if | ||||
|     the user installs one, as long as the modified version is | ||||
|     interface-compatible with the version that the work was made with. | ||||
| 
 | ||||
|     c) Accompany the work with a written offer, valid for at | ||||
|     least three years, to give the same user the materials | ||||
|     specified in Subsection 6a, above, for a charge no more | ||||
|     than the cost of performing this distribution. | ||||
| 
 | ||||
|     d) If distribution of the work is made by offering access to copy | ||||
|     from a designated place, offer equivalent access to copy the above | ||||
|     specified materials from the same place. | ||||
| 
 | ||||
|     e) Verify that the user has already received a copy of these | ||||
|     materials or that you have already sent this user a copy. | ||||
| 
 | ||||
|   For an executable, the required form of the "work that uses the | ||||
| Library" must include any data and utility programs needed for | ||||
| reproducing the executable from it.  However, as a special exception, | ||||
| the materials to be distributed need not include anything that is | ||||
| normally distributed (in either source or binary form) with the major | ||||
| components (compiler, kernel, and so on) of the operating system on | ||||
| which the executable runs, unless that component itself accompanies | ||||
| the executable. | ||||
| 
 | ||||
|   It may happen that this requirement contradicts the license | ||||
| restrictions of other proprietary libraries that do not normally | ||||
| accompany the operating system.  Such a contradiction means you cannot | ||||
| use both them and the Library together in an executable that you | ||||
| distribute. | ||||
|  | ||||
|   7. You may place library facilities that are a work based on the | ||||
| Library side-by-side in a single library together with other library | ||||
| facilities not covered by this License, and distribute such a combined | ||||
| library, provided that the separate distribution of the work based on | ||||
| the Library and of the other library facilities is otherwise | ||||
| permitted, and provided that you do these two things: | ||||
| 
 | ||||
|     a) Accompany the combined library with a copy of the same work | ||||
|     based on the Library, uncombined with any other library | ||||
|     facilities.  This must be distributed under the terms of the | ||||
|     Sections above. | ||||
| 
 | ||||
|     b) Give prominent notice with the combined library of the fact | ||||
|     that part of it is a work based on the Library, and explaining | ||||
|     where to find the accompanying uncombined form of the same work. | ||||
| 
 | ||||
|   8. You may not copy, modify, sublicense, link with, or distribute | ||||
| the Library except as expressly provided under this License.  Any | ||||
| attempt otherwise to copy, modify, sublicense, link with, or | ||||
| distribute the Library is void, and will automatically terminate your | ||||
| rights under this License.  However, parties who have received copies, | ||||
| or rights, from you under this License will not have their licenses | ||||
| terminated so long as such parties remain in full compliance. | ||||
| 
 | ||||
|   9. You are not required to accept this License, since you have not | ||||
| signed it.  However, nothing else grants you permission to modify or | ||||
| distribute the Library or its derivative works.  These actions are | ||||
| prohibited by law if you do not accept this License.  Therefore, by | ||||
| modifying or distributing the Library (or any work based on the | ||||
| Library), you indicate your acceptance of this License to do so, and | ||||
| all its terms and conditions for copying, distributing or modifying | ||||
| the Library or works based on it. | ||||
| 
 | ||||
|   10. Each time you redistribute the Library (or any work based on the | ||||
| Library), the recipient automatically receives a license from the | ||||
| original licensor to copy, distribute, link with or modify the Library | ||||
| subject to these terms and conditions.  You may not impose any further | ||||
| restrictions on the recipients' exercise of the rights granted herein. | ||||
| You are not responsible for enforcing compliance by third parties with | ||||
| this License. | ||||
|  | ||||
|   11. If, as a consequence of a court judgment or allegation of patent | ||||
| infringement or for any other reason (not limited to patent issues), | ||||
| conditions are imposed on you (whether by court order, agreement or | ||||
| otherwise) that contradict the conditions of this License, they do not | ||||
| excuse you from the conditions of this License.  If you cannot | ||||
| distribute so as to satisfy simultaneously your obligations under this | ||||
| License and any other pertinent obligations, then as a consequence you | ||||
| may not distribute the Library at all.  For example, if a patent | ||||
| license would not permit royalty-free redistribution of the Library by | ||||
| all those who receive copies directly or indirectly through you, then | ||||
| the only way you could satisfy both it and this License would be to | ||||
| refrain entirely from distribution of the Library. | ||||
| 
 | ||||
| If any portion of this section is held invalid or unenforceable under any | ||||
| particular circumstance, the balance of the section is intended to apply, | ||||
| and the section as a whole is intended to apply in other circumstances. | ||||
| 
 | ||||
| It is not the purpose of this section to induce you to infringe any | ||||
| patents or other property right claims or to contest validity of any | ||||
| such claims; this section has the sole purpose of protecting the | ||||
| integrity of the free software distribution system which is | ||||
| implemented by public license practices.  Many people have made | ||||
| generous contributions to the wide range of software distributed | ||||
| through that system in reliance on consistent application of that | ||||
| system; it is up to the author/donor to decide if he or she is willing | ||||
| to distribute software through any other system and a licensee cannot | ||||
| impose that choice. | ||||
| 
 | ||||
| This section is intended to make thoroughly clear what is believed to | ||||
| be a consequence of the rest of this License. | ||||
| 
 | ||||
|   12. If the distribution and/or use of the Library is restricted in | ||||
| certain countries either by patents or by copyrighted interfaces, the | ||||
| original copyright holder who places the Library under this License may add | ||||
| an explicit geographical distribution limitation excluding those countries, | ||||
| so that distribution is permitted only in or among countries not thus | ||||
| excluded.  In such case, this License incorporates the limitation as if | ||||
| written in the body of this License. | ||||
| 
 | ||||
|   13. The Free Software Foundation may publish revised and/or new | ||||
| versions of the Lesser General Public License from time to time. | ||||
| Such new versions will be similar in spirit to the present version, | ||||
| but may differ in detail to address new problems or concerns. | ||||
| 
 | ||||
| Each version is given a distinguishing version number.  If the Library | ||||
| specifies a version number of this License which applies to it and | ||||
| "any later version", you have the option of following the terms and | ||||
| conditions either of that version or of any later version published by | ||||
| the Free Software Foundation.  If the Library does not specify a | ||||
| license version number, you may choose any version ever published by | ||||
| the Free Software Foundation. | ||||
|  | ||||
|   14. If you wish to incorporate parts of the Library into other free | ||||
| programs whose distribution conditions are incompatible with these, | ||||
| write to the author to ask for permission.  For software which is | ||||
| copyrighted by the Free Software Foundation, write to the Free | ||||
| Software Foundation; we sometimes make exceptions for this.  Our | ||||
| decision will be guided by the two goals of preserving the free status | ||||
| of all derivatives of our free software and of promoting the sharing | ||||
| and reuse of software generally. | ||||
| 
 | ||||
| 			    NO WARRANTY | ||||
| 
 | ||||
|   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO | ||||
| WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. | ||||
| EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR | ||||
| OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY | ||||
| KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||||
| PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | ||||
| LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME | ||||
| THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||||
| 
 | ||||
|   16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN | ||||
| WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY | ||||
| AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU | ||||
| FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR | ||||
| CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE | ||||
| LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING | ||||
| RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | ||||
| FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF | ||||
| SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | ||||
| DAMAGES. | ||||
| 
 | ||||
| 		     END OF TERMS AND CONDITIONS | ||||
| @ -1,57 +0,0 @@ | ||||
| NAME: | ||||
| 
 | ||||
|     Securimage - A PHP class for creating and managing form CAPTCHA images | ||||
| 
 | ||||
| VERSION: 1.0.2 | ||||
| 
 | ||||
| AUTHOR: | ||||
| 
 | ||||
|     Drew Phillips <drew@drew-phillips.com> | ||||
| 
 | ||||
| DOWNLOAD: | ||||
| 
 | ||||
|     The latest version can always be | ||||
|     found at http://www.phpcaptcha.org | ||||
| 
 | ||||
| DOCUMENTATION: | ||||
| 
 | ||||
|     Online documentation of the class, methods, and variables can | ||||
|     be found at http://www.phpcaptcha.org/Securimage_Docs/ | ||||
| 
 | ||||
| REQUIREMENTS: | ||||
|     PHP 4.3.0 | ||||
|     GD  2.0 | ||||
|     FreeType (optional, required for TTF support) | ||||
| 
 | ||||
| SYNOPSIS: | ||||
| 
 | ||||
|     require_once 'securimage.php'; | ||||
| 
 | ||||
|     $image = new Securimage(); | ||||
| 
 | ||||
|     $image->show(); | ||||
| 
 | ||||
|     // Code Validation | ||||
| 
 | ||||
|     $image = new Securimage(); | ||||
|     if ($image->check($_POST['code']) == true) { | ||||
|       echo "Correct!"; | ||||
|     } else { | ||||
|       echo "Sorry, wrong code."; | ||||
|     } | ||||
| 
 | ||||
| DESCRIPTION: | ||||
| 
 | ||||
|     What is Securimage? | ||||
| 
 | ||||
|     Securimage is a PHP class that is used to generate and validate CAPTCHA images. | ||||
|     The classes uses an existing PHP session or creates its own if none is found to store the | ||||
|     CAPTCHA code.  Variables within the class are used to control the style and display of the image. | ||||
|     The class supports TTF fonts and effects for strengthening the security of the image. | ||||
|     If TTF support is not available, GD fonts can be used as well, but certain options such as | ||||
|     transparent text and angled letters cannot be used. | ||||
| 
 | ||||
| 
 | ||||
| COPYRIGHT: | ||||
|     Copyright (c) 2007 Drew Phillips. All rights reserved. | ||||
|     This software is released under the GNU Lesser General Public License. | ||||
										
											Binary file not shown.
										
									
								
							| @ -1,82 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| /** | ||||
|  * Project:     Securimage: A PHP class for creating and managing form CAPTCHA images<br /> | ||||
|  * File:        form.php<br /><br /> | ||||
|  * | ||||
|  * This is a very simple form sending a username and password.<br /> | ||||
|  * It demonstrates how you can integrate the image script into your code.<br /> | ||||
|  * By creating a new instance of the class and passing the user entered code as the only parameter, you can then immediately call $obj->checkCode() which will return true if the code is correct, or false otherwise.<br /> | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Lesser General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2.1 of the License, or any later version.<br /><br /> | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Lesser General Public License for more details.<br /><br /> | ||||
|  * | ||||
|  * You should have received a copy of the GNU Lesser General Public | ||||
|  * License along with this library; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA<br /><br /> | ||||
|  *  | ||||
|  * Any modifications to the library should be indicated clearly in the source code  | ||||
|  * to inform users that the changes are not a part of the original software.<br /><br /> | ||||
|  * | ||||
|  * If you found this script useful, please take a quick moment to rate it.<br /> | ||||
|  * http://www.hotscripts.com/rate/49400.html  Thanks. | ||||
|  * | ||||
|  * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA | ||||
|  * @link http://www.phpcaptcha.org/latest.zip Download Latest Version | ||||
|  * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation | ||||
|  * @copyright 2007 Drew Phillips | ||||
|  * @author drew010 <drew@drew-phillips.com> | ||||
|  * @version 1.0.3.1 (March 23, 2008) | ||||
|  * @package Securimage | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
|   session_start(); | ||||
| 
 | ||||
| ?>
 | ||||
| <html> | ||||
| <head> | ||||
|   <title>Securimage Test Form</title> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
| 
 | ||||
| <?php | ||||
| if (empty($_POST)) { ?>
 | ||||
| <form method="POST"> | ||||
| Username:<br /> | ||||
| <input type="text" name="username" /><br /> | ||||
| Password:<br /> | ||||
| <input type="text" name="password" /><br /> | ||||
| 
 | ||||
| <!-- pass a session id to the query string of the script to prevent ie caching --> | ||||
| <img src="securimage_show.php?sid=<?php echo md5(uniqid(time())); ?>"><br /> | ||||
| <input type="text" name="code" /><br /> | ||||
| 
 | ||||
| <input type="submit" value="Submit Form" /> | ||||
| </form> | ||||
| 
 | ||||
| <?php | ||||
| } else { //form is posted
 | ||||
|   include("securimage.php"); | ||||
|   $img = new Securimage(); | ||||
|   $valid = $img->check($_POST['code']); | ||||
| 
 | ||||
|   if($valid == true) { | ||||
|     echo "<center>Thanks, you entered the correct code.</center>"; | ||||
|   } else { | ||||
|     echo "<center>Sorry, the code you entered was invalid.  <a href=\"javascript:history.go(-1)\">Go back</a> to try again.</center>"; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| ?>
 | ||||
| 
 | ||||
| </body> | ||||
| </html> | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 621 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 865 B | 
| @ -1,932 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| /** | ||||
|  * Project:     Securimage: A PHP class for creating and managing form CAPTCHA images<br /> | ||||
|  * File:        securimage.php<br /> | ||||
|  * | ||||
|  * This library is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Lesser General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2.1 of the License, or any later version.<br /><br /> | ||||
|  * | ||||
|  * This library is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  * Lesser General Public License for more details.<br /><br /> | ||||
|  * | ||||
|  * You should have received a copy of the GNU Lesser General Public | ||||
|  * License along with this library; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA<br /><br /> | ||||
|  * | ||||
|  * Any modifications to the library should be indicated clearly in the source code | ||||
|  * to inform users that the changes are not a part of the original software.<br /><br /> | ||||
|  * | ||||
|  * If you found this script useful, please take a quick moment to rate it.<br /> | ||||
|  * http://www.hotscripts.com/rate/49400.html  Thanks. | ||||
|  * | ||||
|  * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA | ||||
|  * @link http://www.phpcaptcha.org/latest.zip Download Latest Version | ||||
|  * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation | ||||
|  * @copyright 2007 Drew Phillips | ||||
|  * @author drew010 <drew@drew-phillips.com> | ||||
|  * @version 1.0.3.1 (March 24, 2008) | ||||
|  * @package Securimage | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|   ChangeLog | ||||
| 
 | ||||
|   1.0.3.1 | ||||
|   - Error reading from wordlist in some cases caused words to be cut off 1 letter short | ||||
| 
 | ||||
|   1.0.3 | ||||
|   - Removed shadow_text from code which could cause an undefined property error due to removal from previous version | ||||
| 
 | ||||
|   1.0.2 | ||||
|   - Audible CAPTCHA Code wav files | ||||
|   - Create codes from a word list instead of random strings | ||||
| 
 | ||||
|   1.0 | ||||
|   - Added the ability to use a selected character set, rather than a-z0-9 only. | ||||
|   - Added the multi-color text option to use different colors for each letter. | ||||
|   - Switched to automatic session handling instead of using files for code storage | ||||
|   - Added GD Font support if ttf support is not available.  Can use internal GD fonts or load new ones. | ||||
|   - Added the ability to set line thickness | ||||
|   - Added option for drawing arced lines over letters | ||||
|   - Added ability to choose image type for output | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| /** | ||||
|  * Output images in JPEG format | ||||
|  */ | ||||
| define('SI_IMAGE_JPEG', 1); | ||||
| /** | ||||
|  * Output images in PNG format | ||||
|  */ | ||||
| define('SI_IMAGE_PNG',  2); | ||||
| /** | ||||
|  * Output images in GIF format | ||||
|  * Must have GD >= 2.0.28! | ||||
|  */ | ||||
| define('SI_IMAGE_GIF',  3); | ||||
| 
 | ||||
| /** | ||||
|  * Securimage CAPTCHA Class. | ||||
|  * | ||||
|  * @package    Securimage | ||||
|  * @subpackage classes | ||||
|  * | ||||
|  */ | ||||
| class Securimage { | ||||
| 
 | ||||
|   /** | ||||
|    * The desired width of the CAPTCHA image. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $image_width = 175; | ||||
| 
 | ||||
|   /** | ||||
|    * The desired width of the CAPTCHA image. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $image_height = 45; | ||||
| 
 | ||||
|   /** | ||||
|    * The image format for output.<br /> | ||||
|    * Valid options: SI_IMAGE_PNG, SI_IMAGE_JPG, SI_IMAGE_GIF | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $image_type = SI_IMAGE_PNG; | ||||
| 
 | ||||
|   /** | ||||
|    * The length of the code to generate. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $code_length = 4; | ||||
| 
 | ||||
|   /** | ||||
|    * The character set for individual characters in the image.<br /> | ||||
|    * Letters are converted to uppercase.<br /> | ||||
|    * The font must support the letters or there may be problematic substitutions. | ||||
|    * | ||||
|    * @var string | ||||
|    */ | ||||
|   var $charset = 'ABCDEFGHKLMNPRSTUVWYZ23456789'; | ||||
|   //var $charset = '0123456789';
 | ||||
| 
 | ||||
|   /** | ||||
|    * Create codes using this word list | ||||
|    * | ||||
|    * @var string  The path to the word list to use for creating CAPTCHA codes | ||||
|    */ | ||||
|   var $wordlist_file = '../words/words.txt'; | ||||
| 
 | ||||
|   /** | ||||
|    * True to use a word list file instead of a random code | ||||
|    * | ||||
|    * @var bool | ||||
|    */ | ||||
|   var $use_wordlist  = true; | ||||
| 
 | ||||
|   /** | ||||
|    * Whether to use a GD font instead of a TTF font.<br /> | ||||
|    * TTF offers more support and options, but use this if your PHP doesn't support TTF.<br /> | ||||
|    * | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $use_gd_font = false; | ||||
| 
 | ||||
|   /** | ||||
|    * The GD font to use.<br /> | ||||
|    * Internal gd fonts can be loaded by their number.<br /> | ||||
|    * Alternatively, a file path can be given and the font will be loaded from file. | ||||
|    * | ||||
|    * @var mixed | ||||
|    */ | ||||
|   var $gd_font_file = 'gdfonts/bubblebath.gdf'; | ||||
| 
 | ||||
|   /** | ||||
|    * The approximate size of the font in pixels.<br /> | ||||
|    * This does not control the size of the font because that is determined by the GD font itself.<br /> | ||||
|    * This is used to aid the calculations of positioning used by this class.<br /> | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $gd_font_size = 20; | ||||
| 
 | ||||
|   // Note: These font options below do not apply if you set $use_gd_font to true with the exception of $text_color
 | ||||
| 
 | ||||
|   /** | ||||
|    * The path to the TTF font file to load. | ||||
|    * | ||||
|    * @var string | ||||
|    */ | ||||
|   var $ttf_file = "./elephant.ttf"; | ||||
| 
 | ||||
|   /** | ||||
|    * The font size.<br /> | ||||
|    * Depending on your version of GD, this should be specified as the pixel size (GD1) or point size (GD2)<br /> | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $font_size = 24; | ||||
| 
 | ||||
|   /** | ||||
|    * The minimum angle in degrees, with 0 degrees being left-to-right reading text.<br /> | ||||
|    * Higher values represent a counter-clockwise rotation.<br /> | ||||
|    * For example, a value of 90 would result in bottom-to-top reading text. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $text_angle_minimum = -20; | ||||
| 
 | ||||
|   /** | ||||
|    * The minimum angle in degrees, with 0 degrees being left-to-right reading text.<br /> | ||||
|    * Higher values represent a counter-clockwise rotation.<br /> | ||||
|    * For example, a value of 90 would result in bottom-to-top reading text. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $text_angle_maximum = 20; | ||||
| 
 | ||||
|   /** | ||||
|    * The X-Position on the image where letter drawing will begin.<br /> | ||||
|    * This value is in pixels from the left side of the image. | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $text_x_start = 8; | ||||
| 
 | ||||
|   /** | ||||
|    * Letters can be spaced apart at random distances.<br /> | ||||
|    * This is the minimum distance between two letters.<br /> | ||||
|    * This should be <i>at least</i> as wide as a font character.<br /> | ||||
|    * Small values can cause letters to be drawn over eachother.<br /> | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $text_minimum_distance = 30; | ||||
| 
 | ||||
|   /** | ||||
|    * Letters can be spaced apart at random distances.<br /> | ||||
|    * This is the maximum distance between two letters.<br /> | ||||
|    * This should be <i>at least</i> as wide as a font character.<br /> | ||||
|    * Small values can cause letters to be drawn over eachother.<br /> | ||||
|    * | ||||
|    * @var int | ||||
|    */ | ||||
|   var $text_maximum_distance = 33; | ||||
| 
 | ||||
|   /** | ||||
|    * The background color for the image.<br /> | ||||
|    * This should be specified in HTML hex format.<br /> | ||||
|    * Make sure to include the preceding # sign!
 | ||||
|    * | ||||
|    * @var string | ||||
|    */ | ||||
|   var $image_bg_color = "#e3daed"; | ||||
| 
 | ||||
|   /** | ||||
|    * The text color to use for drawing characters.<br /> | ||||
|    * This value is ignored if $use_multi_text is set to true.<br /> | ||||
|    * Make sure this contrasts well with the background color.<br /> | ||||
|    * Specify the color in HTML hex format with preceding # sign
 | ||||
|    * | ||||
|    * @see Securimage::$use_multi_text | ||||
|    * @var string | ||||
|    */ | ||||
|   var $text_color = "#ff0000"; | ||||
| 
 | ||||
|   /** | ||||
|    * Set to true to use multiple colors for each character. | ||||
|    * | ||||
|    * @see Securimage::$multi_text_color | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $use_multi_text = true; | ||||
| 
 | ||||
|   /** | ||||
|    * String of HTML hex colors to use.<br /> | ||||
|    * Separate each possible color with commas.<br /> | ||||
|    * Be sure to precede each value with the # sign.
 | ||||
|    * | ||||
|    * @var string | ||||
|    */ | ||||
|   var $multi_text_color = "#0a68dd,#f65c47,#8d32fd"; | ||||
| 
 | ||||
|   /** | ||||
|    * Set to true to make the characters appear transparent. | ||||
|    * | ||||
|    * @see Securimage::$text_transparency_percentage | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $use_transparent_text = true; | ||||
| 
 | ||||
|   /** | ||||
|    * The percentage of transparency, 0 to 100.<br /> | ||||
|    * A value of 0 is completely opaque, 100 is completely transparent (invisble) | ||||
|    * | ||||
|    * @see Securimage::$use_transparent_text | ||||
|    * @var int | ||||
|    */ | ||||
|   var $text_transparency_percentage = 15; | ||||
| 
 | ||||
| 
 | ||||
|   // Line options
 | ||||
|   /** | ||||
|    * Draw vertical and horizontal lines on the image. | ||||
|    * | ||||
|    * @see Securimage::$line_color | ||||
|    * @see Securimage::$line_distance | ||||
|    * @see Securimage::$line_thickness | ||||
|    * @see Securimage::$draw_lines_over_text | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $draw_lines = true; | ||||
| 
 | ||||
|   /** | ||||
|    * The color of the lines drawn on the image.<br /> | ||||
|    * Use HTML hex format with preceding # sign.
 | ||||
|    * | ||||
|    * @see Securimage::$draw_lines | ||||
|    * @var string | ||||
|    */ | ||||
|   var $line_color = "#80BFFF"; | ||||
| 
 | ||||
|   /** | ||||
|    * How far apart to space the lines from eachother in pixels. | ||||
|    * | ||||
|    * @see Securimage::$draw_lines | ||||
|    * @var int | ||||
|    */ | ||||
|   var $line_distance = 5; | ||||
| 
 | ||||
|   /** | ||||
|    * How thick to draw the lines in pixels.<br /> | ||||
|    * 1-3 is ideal depending on distance | ||||
|    * | ||||
|    * @see Securimage::$draw_lines | ||||
|    * @see Securimage::$line_distance | ||||
|    * @var int | ||||
|    */ | ||||
|   var $line_thickness = 1; | ||||
| 
 | ||||
|   /** | ||||
|    * Set to true to draw angled lines on the image in addition to the horizontal and vertical lines. | ||||
|    * | ||||
|    * @see Securimage::$draw_lines | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $draw_angled_lines = false; | ||||
| 
 | ||||
|   /** | ||||
|    * Draw the lines over the text.<br /> | ||||
|    * If fales lines will be drawn before putting the text on the image.<br /> | ||||
|    * This can make the image hard for humans to read depending on the line thickness and distance. | ||||
|    * | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $draw_lines_over_text = false; | ||||
| 
 | ||||
|   /** | ||||
|    * For added security, it is a good idea to draw arced lines over the letters to make it harder for bots to segment the letters.<br /> | ||||
|    * Two arced lines will be drawn over the text on each side of the image.<br /> | ||||
|    * This is currently expirimental and may be off in certain configurations. | ||||
|    * | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $arc_linethrough = true; | ||||
| 
 | ||||
|   /** | ||||
|    * The colors or color of the arced lines.<br /> | ||||
|    * Use HTML hex notation with preceding # sign, and separate each value with a comma.<br />
 | ||||
|    * This should be similar to your font color for single color images. | ||||
|    * | ||||
|    * @var string | ||||
|    */ | ||||
|   var $arc_line_colors = "#8080ff"; | ||||
| 
 | ||||
|   /** | ||||
|    * Full path to the WAV files to use to make the audio files, include trailing /.<br /> | ||||
|    * Name Files  [A-Z0-9].wav | ||||
|    * | ||||
|    * @since 1.0.1 | ||||
|    * @var string | ||||
|    */ | ||||
|   var $audio_path = './audio/'; | ||||
| 
 | ||||
| 
 | ||||
|   //END USER CONFIGURATION
 | ||||
|   //There should be no need to edit below unless you really know what you are doing.
 | ||||
| 
 | ||||
|   /** | ||||
|    * The gd image resource. | ||||
|    * | ||||
|    * @access private | ||||
|    * @var resource | ||||
|    */ | ||||
|   var $im; | ||||
| 
 | ||||
|   /** | ||||
|    * The background image resource | ||||
|    * | ||||
|    * @access private | ||||
|    * @var resource | ||||
|    */ | ||||
|   var $bgimg; | ||||
| 
 | ||||
|   /** | ||||
|    * The code generated by the script | ||||
|    * | ||||
|    * @access private | ||||
|    * @var string | ||||
|    */ | ||||
|   var $code; | ||||
| 
 | ||||
|   /** | ||||
|    * The code that was entered by the user | ||||
|    * | ||||
|    * @access private | ||||
|    * @var string | ||||
|    */ | ||||
|   var $code_entered; | ||||
| 
 | ||||
|   /** | ||||
|    * Whether or not the correct code was entered | ||||
|    * | ||||
|    * @access private | ||||
|    * @var boolean | ||||
|    */ | ||||
|   var $correct_code; | ||||
| 
 | ||||
|   /** | ||||
|    * Class constructor.<br /> | ||||
|    * Because the class uses sessions, this will attempt to start a session if there is no previous one.<br /> | ||||
|    * If you do not start a session before calling the class, the constructor must be called before any | ||||
|    * output is sent to the browser. | ||||
|    * | ||||
|    * <code> | ||||
|    *   $securimage = new Securimage(); | ||||
|    * </code> | ||||
|    * | ||||
|    */ | ||||
|   function Securimage() | ||||
|   { | ||||
|     if ( session_id() == '' ) { // no session has been started yet, which is needed for validation
 | ||||
|       session_start(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Generate a code and output the image to the browser. | ||||
|    * | ||||
|    * <code> | ||||
|    *   <?php | ||||
|    *   include 'securimage.php'; | ||||
|    *   $securimage = new Securimage(); | ||||
|    *   $securimage->show('bg.jpg'); | ||||
|    *   ?>
 | ||||
|    * </code> | ||||
|    * | ||||
|    * @param string $background_image  The path to an image to use as the background for the CAPTCHA | ||||
|    */ | ||||
|   function show($background_image = "") | ||||
|   { | ||||
|     if($background_image != "" && is_readable($background_image)) { | ||||
|       $this->bgimg = $background_image; | ||||
|     } | ||||
| 
 | ||||
|     $this->doImage(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Validate the code entered by the user. | ||||
|    * | ||||
|    * <code> | ||||
|    *   $code = $_POST['code']; | ||||
|    *   if ($securimage->check($code) == false) { | ||||
|    *     die("Sorry, the code entered did not match."); | ||||
|    *   } else { | ||||
|    *     $valid = true; | ||||
|    *   } | ||||
|    * </code> | ||||
|    * @param string $code  The code the user entered | ||||
|    * @return boolean  true if the code was correct, false if not | ||||
|    */ | ||||
|   function check($code) | ||||
|   { | ||||
|     $this->code_entered = $code; | ||||
|     $this->validate(); | ||||
|     return $this->correct_code; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Generate and output the image | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function doImage() | ||||
|   { | ||||
|     if($this->use_transparent_text == true || $this->bgimg != "") { | ||||
|       $this->im = imagecreatetruecolor($this->image_width, $this->image_height); | ||||
|       $bgcolor = imagecolorallocate($this->im, hexdec(substr($this->image_bg_color, 1, 2)), hexdec(substr($this->image_bg_color, 3, 2)), hexdec(substr($this->image_bg_color, 5, 2))); | ||||
|       imagefilledrectangle($this->im, 0, 0, imagesx($this->im), imagesy($this->im), $bgcolor); | ||||
|     } else { //no transparency
 | ||||
|       $this->im = imagecreate($this->image_width, $this->image_height); | ||||
|       $bgcolor = imagecolorallocate($this->im, hexdec(substr($this->image_bg_color, 1, 2)), hexdec(substr($this->image_bg_color, 3, 2)), hexdec(substr($this->image_bg_color, 5, 2))); | ||||
|     } | ||||
| 
 | ||||
|     if($this->bgimg != "") { $this->setBackground(); } | ||||
| 
 | ||||
|     $this->createCode(); | ||||
| 
 | ||||
|     if (!$this->draw_lines_over_text && $this->draw_lines) $this->drawLines(); | ||||
| 
 | ||||
|     $this->drawWord(); | ||||
| 
 | ||||
|     if ($this->arc_linethrough == true) $this->arcLines(); | ||||
| 
 | ||||
|     if ($this->draw_lines_over_text && $this->draw_lines) $this->drawLines(); | ||||
| 
 | ||||
|     $this->output(); | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Set the background of the CAPTCHA image | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function setBackground() | ||||
|   { | ||||
|     $dat = @getimagesize($this->bgimg); | ||||
|     if($dat == false) { return; } | ||||
| 
 | ||||
|     switch($dat[2]) { | ||||
|       case 1:  $newim = @imagecreatefromgif($this->bgimg); break; | ||||
|       case 2:  $newim = @imagecreatefromjpeg($this->bgimg); break; | ||||
|       case 3:  $newim = @imagecreatefrompng($this->bgimg); break; | ||||
|       case 15: $newim = @imagecreatefromwbmp($this->bgimg); break; | ||||
|       case 16: $newim = @imagecreatefromxbm($this->bgimg); break; | ||||
|       default: return; | ||||
|     } | ||||
| 
 | ||||
|     if(!$newim) return; | ||||
| 
 | ||||
|     imagecopy($this->im, $newim, 0, 0, 0, 0, $this->image_width, $this->image_height); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Draw arced lines over the text | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function arcLines() | ||||
|   { | ||||
|     $colors = explode(',', $this->arc_line_colors); | ||||
|     imagesetthickness($this->im, 3); | ||||
| 
 | ||||
|     $color = $colors[rand(0, sizeof($colors) - 1)]; | ||||
|     $linecolor = imagecolorallocate($this->im, hexdec(substr($color, 1, 2)), hexdec(substr($color, 3, 2)), hexdec(substr($color, 5, 2))); | ||||
| 
 | ||||
|     $xpos   = $this->text_x_start + ($this->font_size * 2) + rand(-5, 5); | ||||
|     $width  = $this->image_width / 2.66 + rand(3, 10); | ||||
|     $height = $this->font_size * 2.14 - rand(3, 10); | ||||
| 
 | ||||
|     if ( rand(0,100) % 2 == 0 ) { | ||||
|       $start = rand(0,66); | ||||
|       $ypos  = $this->image_height / 2 - rand(5, 15); | ||||
|       $xpos += rand(5, 15); | ||||
|     } else { | ||||
|       $start = rand(180, 246); | ||||
|       $ypos  = $this->image_height / 2 + rand(5, 15); | ||||
|     } | ||||
| 
 | ||||
|     $end = $start + rand(75, 110); | ||||
| 
 | ||||
|     imagearc($this->im, $xpos, $ypos, $width, $height, $start, $end, $linecolor); | ||||
| 
 | ||||
|     $color = $colors[rand(0, sizeof($colors) - 1)]; | ||||
|     $linecolor = imagecolorallocate($this->im, hexdec(substr($color, 1, 2)), hexdec(substr($color, 3, 2)), hexdec(substr($color, 5, 2))); | ||||
| 
 | ||||
|     if ( rand(1,75) % 2 == 0 ) { | ||||
|       $start = rand(45, 111); | ||||
|       $ypos  = $this->image_height / 2 - rand(5, 15); | ||||
|       $xpos += rand(5, 15); | ||||
|     } else { | ||||
|       $start = rand(200, 250); | ||||
|       $ypos  = $this->image_height / 2 + rand(5, 15); | ||||
|     } | ||||
| 
 | ||||
|     $end = $start + rand(75, 100); | ||||
| 
 | ||||
|     imagearc($this->im, $this->image_width * .75, $ypos, $width, $height, $start, $end, $linecolor); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Draw lines on the image | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function drawLines() | ||||
|   { | ||||
|     $linecolor = imagecolorallocate($this->im, hexdec(substr($this->line_color, 1, 2)), hexdec(substr($this->line_color, 3, 2)), hexdec(substr($this->line_color, 5, 2))); | ||||
|     imagesetthickness($this->im, $this->line_thickness); | ||||
| 
 | ||||
|     //vertical lines
 | ||||
|     for($x = 1; $x < $this->image_width; $x += $this->line_distance) { | ||||
|       imageline($this->im, $x, 0, $x, $this->image_height, $linecolor); | ||||
|     } | ||||
| 
 | ||||
|     //horizontal lines
 | ||||
|     for($y = 11; $y < $this->image_height; $y += $this->line_distance) { | ||||
|       imageline($this->im, 0, $y, $this->image_width, $y, $linecolor); | ||||
|     } | ||||
| 
 | ||||
|     if ($this->draw_angled_lines == true) { | ||||
|       for ($x = -($this->image_height); $x < $this->image_width; $x += $this->line_distance) { | ||||
|         imageline($this->im, $x, 0, $x + $this->image_height, $this->image_height, $linecolor); | ||||
|       } | ||||
| 
 | ||||
|       for ($x = $this->image_width + $this->image_height; $x > 0; $x -= $this->line_distance) { | ||||
|         imageline($this->im, $x, 0, $x - $this->image_height, $this->image_height, $linecolor); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Draw the CAPTCHA code over the image | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function drawWord() | ||||
|   { | ||||
|     if ($this->use_gd_font == true) { | ||||
|       if (!is_int($this->gd_font_file)) { //is a file name
 | ||||
|         $font = @imageloadfont($this->gd_font_file); | ||||
|         if ($font == false) { | ||||
|           trigger_error("Failed to load GD Font file {$this->gd_font_file} ", E_USER_WARNING); | ||||
|           return; | ||||
|         } | ||||
|       } else { //gd font identifier
 | ||||
|         $font = $this->gd_font_file; | ||||
|       } | ||||
| 
 | ||||
|       $color = imagecolorallocate($this->im, hexdec(substr($this->text_color, 1, 2)), hexdec(substr($this->text_color, 3, 2)), hexdec(substr($this->text_color, 5, 2))); | ||||
|       imagestring($this->im, $font, $this->text_x_start, ($this->image_height / 2) - ($this->gd_font_size / 2), $this->code, $color); | ||||
| 
 | ||||
|     } else { //ttf font
 | ||||
|       if($this->use_transparent_text == true) { | ||||
|         $alpha = intval($this->text_transparency_percentage / 100 * 127); | ||||
|         $font_color = imagecolorallocatealpha($this->im, hexdec(substr($this->text_color, 1, 2)), hexdec(substr($this->text_color, 3, 2)), hexdec(substr($this->text_color, 5, 2)), $alpha); | ||||
|       } else { //no transparency
 | ||||
|         $font_color = imagecolorallocate($this->im, hexdec(substr($this->text_color, 1, 2)), hexdec(substr($this->text_color, 3, 2)), hexdec(substr($this->text_color, 5, 2))); | ||||
|       } | ||||
| 
 | ||||
|       $x = $this->text_x_start; | ||||
|       $strlen = strlen($this->code); | ||||
|       $y_min = ($this->image_height / 2) + ($this->font_size / 2) - 2; | ||||
|       $y_max = ($this->image_height / 2) + ($this->font_size / 2) + 2; | ||||
|       $colors = explode(',', $this->multi_text_color); | ||||
| 
 | ||||
|       for($i = 0; $i < $strlen; ++$i) { | ||||
|         $angle = rand($this->text_angle_minimum, $this->text_angle_maximum); | ||||
|         $y = rand($y_min, $y_max); | ||||
|         if ($this->use_multi_text == true) { | ||||
|           $idx = rand(0, sizeof($colors) - 1); | ||||
|           $r = substr($colors[$idx], 1, 2); | ||||
|           $g = substr($colors[$idx], 3, 2); | ||||
|           $b = substr($colors[$idx], 5, 2); | ||||
|           if($this->use_transparent_text == true) { | ||||
|             $font_color = imagecolorallocatealpha($this->im, "0x$r", "0x$g", "0x$b", $alpha); | ||||
|           } else { | ||||
|             $font_color = imagecolorallocate($this->im, "0x$r", "0x$g", "0x$b"); | ||||
|           } | ||||
|         } | ||||
|         @imagettftext($this->im, $this->font_size, $angle, $x, $y, $font_color, $this->ttf_file, $this->code{$i}); | ||||
| 
 | ||||
|         $x += rand($this->text_minimum_distance, $this->text_maximum_distance); | ||||
|       } //for loop
 | ||||
|     } //else ttf font
 | ||||
|   } //function
 | ||||
| 
 | ||||
|   /** | ||||
|    * Create a code and save to the session | ||||
|    * | ||||
|    * @since 1.0.1 | ||||
|    * | ||||
|    */ | ||||
|   function createCode() | ||||
|   { | ||||
|     $this->code = false; | ||||
| 
 | ||||
|     if ($this->use_wordlist && is_readable($this->wordlist_file)) { | ||||
|       $this->code = $this->readCodeFromFile(); | ||||
|     } | ||||
| 
 | ||||
|     if ($this->code == false) { | ||||
|       $this->code = $this->generateCode($this->code_length); | ||||
|     } | ||||
| 
 | ||||
|     $this->saveData(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Generate a code | ||||
|    * | ||||
|    * @access private | ||||
|    * @param int $len  The code length | ||||
|    * @return string | ||||
|    */ | ||||
|   function generateCode($len) | ||||
|   { | ||||
|     $code = ''; | ||||
| 
 | ||||
|     for($i = 1, $cslen = strlen($this->charset); $i <= $len; ++$i) { | ||||
|       $code .= strtoupper( $this->charset{rand(0, $cslen - 1)} ); | ||||
|     } | ||||
|     return $code; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Reads a word list file to get a code | ||||
|    * | ||||
|    * @access private | ||||
|    * @since 1.0.2 | ||||
|    * @return mixed  false on failure, a word on success | ||||
|    */ | ||||
|   function readCodeFromFile() | ||||
|   { | ||||
|     $fp = @fopen($this->wordlist_file, 'rb'); | ||||
|     if (!$fp) return false; | ||||
| 
 | ||||
|     $fsize = filesize($this->wordlist_file); | ||||
|     if ($fsize < 32) return false; // too small of a list to be effective
 | ||||
| 
 | ||||
|     if ($fsize < 128) { | ||||
|       $max = $fsize; // still pretty small but changes the range of seeking
 | ||||
|     } else { | ||||
|       $max = 128; | ||||
|     } | ||||
| 
 | ||||
|     fseek($fp, rand(0, $fsize - $max), SEEK_SET); | ||||
|     $data = fread($fp, 128); // read a random 128 bytes from file
 | ||||
|     fclose($fp); | ||||
|     $data = preg_replace("/\r?\n/", "\n", $data); | ||||
| 
 | ||||
|     $start = strpos($data, "\n", rand(0, 100)) + 1; // random start position
 | ||||
|     $end   = strpos($data, "\n", $start);           // find end of word
 | ||||
| 
 | ||||
|     return strtolower(substr($data, $start, $end - $start)); // return substring in 128 bytes
 | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Output image to the browser | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function output() | ||||
|   { | ||||
|     header("Expires: Sun, 1 Jan 2000 12:00:00 GMT"); | ||||
|     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); | ||||
|     header("Cache-Control: no-store, no-cache, must-revalidate"); | ||||
|     header("Cache-Control: post-check=0, pre-check=0", false); | ||||
|     header("Pragma: no-cache"); | ||||
| 
 | ||||
|     switch($this->image_type) | ||||
|     { | ||||
|       case SI_IMAGE_JPEG: | ||||
|         header("Content-Type: image/jpeg"); | ||||
|         imagejpeg($this->im, null, 90); | ||||
|         break; | ||||
| 
 | ||||
|       case SI_IMAGE_GIF: | ||||
|         header("Content-Type: image/gif"); | ||||
|         imagegif($this->im); | ||||
|         break; | ||||
| 
 | ||||
|       default: | ||||
|         header("Content-Type: image/png"); | ||||
|         imagepng($this->im); | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     imagedestroy($this->im); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Get WAV file data of the spoken code.<br /> | ||||
|    * This is appropriate for output to the browser as audio/x-wav | ||||
|    * | ||||
|    * @since 1.0.1 | ||||
|    * @return string  WAV data | ||||
|    * | ||||
|    */ | ||||
|   function getAudibleCode() | ||||
|   { | ||||
|     $letters = array(); | ||||
|     $code    = $this->getCode(); | ||||
| 
 | ||||
|     if ($code == '') { | ||||
|       $this->createCode(); | ||||
|       $code = $this->getCode(); | ||||
|     } | ||||
| 
 | ||||
|     for($i = 0; $i < strlen($code); ++$i) { | ||||
|       $letters[] = $code{$i}; | ||||
|     } | ||||
| 
 | ||||
|     return $this->generateWAV($letters); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Save the code in the session | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function saveData() | ||||
|   { | ||||
|     $_SESSION['securimage_code_value'] = strtolower($this->code); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Validate the code to the user code | ||||
|    * | ||||
|    * @access private | ||||
|    * | ||||
|    */ | ||||
|   function validate() | ||||
|   { | ||||
|     if ( isset($_SESSION['securimage_code_value']) && !empty($_SESSION['securimage_code_value']) ) { | ||||
|       if ( $_SESSION['securimage_code_value'] == strtolower(trim($this->code_entered)) ) { | ||||
|         $this->correct_code = true; | ||||
|         $_SESSION['securimage_code_value'] = ''; | ||||
|       } else { | ||||
|         $this->correct_code = false; | ||||
|       } | ||||
|     } else { | ||||
|       $this->correct_code = false; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Get the captcha code | ||||
|    * | ||||
|    * @since 1.0.1 | ||||
|    * @return string | ||||
|    */ | ||||
|   function getCode() | ||||
|   { | ||||
|     if (isset($_SESSION['securimage_code_value']) && !empty($_SESSION['securimage_code_value'])) { | ||||
|       return $_SESSION['securimage_code_value']; | ||||
|     } else { | ||||
|       return ''; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Check if the user entered code was correct | ||||
|    * | ||||
|    * @access private | ||||
|    * @return boolean | ||||
|    */ | ||||
|   function checkCode() | ||||
|   { | ||||
|     return $this->correct_code; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Generate a wav file by concatenating individual files | ||||
|    * @since 1.0.1 | ||||
|    * @access private | ||||
|    * @param array $letters  Array of letters to build a file from | ||||
|    * @return string  WAV file data | ||||
|    */ | ||||
|   function generateWAV($letters) | ||||
|   { | ||||
|     $first = true; // use first file to write the header...
 | ||||
|     $data_len    = 0; | ||||
|     $files       = array(); | ||||
|     $out_data    = ''; | ||||
| 
 | ||||
|     foreach ($letters as $letter) { | ||||
|       $filename = $this->audio_path . strtoupper($letter) . '.wav'; | ||||
| 
 | ||||
|       $fp = fopen($filename, 'rb'); | ||||
| 
 | ||||
|       $file = array(); | ||||
| 
 | ||||
|       $data = fread($fp, filesize($filename)); // read file in
 | ||||
| 
 | ||||
|       $header = substr($data, 0, 36); | ||||
|       $body   = substr($data, 44); | ||||
| 
 | ||||
| 
 | ||||
|       $data = unpack('NChunkID/VChunkSize/NFormat/NSubChunk1ID/VSubChunk1Size/vAudioFormat/vNumChannels/VSampleRate/VByteRate/vBlockAlign/vBitsPerSample', $header); | ||||
| 
 | ||||
|       $file['sub_chunk1_id']   = $data['SubChunk1ID']; | ||||
|       $file['bits_per_sample'] = $data['BitsPerSample']; | ||||
|       $file['channels']        = $data['NumChannels']; | ||||
|       $file['format']          = $data['AudioFormat']; | ||||
|       $file['sample_rate']     = $data['SampleRate']; | ||||
|       $file['size']            = $data['ChunkSize'] + 8; | ||||
|       $file['data']            = $body; | ||||
| 
 | ||||
|       if ( ($p = strpos($file['data'], 'LIST')) !== false) { | ||||
|         // If the LIST data is not at the end of the file, this will probably break your sound file
 | ||||
|         $info         = substr($file['data'], $p + 4, 8); | ||||
|         $data         = unpack('Vlength/Vjunk', $info); | ||||
|         $file['data'] = substr($file['data'], 0, $p); | ||||
|         $file['size'] = $file['size'] - (strlen($file['data']) - $p); | ||||
|       } | ||||
| 
 | ||||
|       $files[] = $file; | ||||
|       $data    = null; | ||||
|       $header  = null; | ||||
|       $body    = null; | ||||
| 
 | ||||
|       $data_len += strlen($file['data']); | ||||
| 
 | ||||
|       fclose($fp); | ||||
|     } | ||||
| 
 | ||||
|     $out_data = ''; | ||||
|     for($i = 0; $i < sizeof($files); ++$i) { | ||||
|       if ($i == 0) { // output header
 | ||||
|         $out_data .= pack('C4VC8', ord('R'), ord('I'), ord('F'), ord('F'), $data_len + 36, ord('W'), ord('A'), ord('V'), ord('E'), ord('f'), ord('m'), ord('t'), ord(' ')); | ||||
| 
 | ||||
|         $out_data .= pack('VvvVVvv', | ||||
|                           16, | ||||
|                           $files[$i]['format'], | ||||
|                           $files[$i]['channels'], | ||||
|                           $files[$i]['sample_rate'], | ||||
|                           $files[$i]['sample_rate'] * (($files[$i]['bits_per_sample'] * $files[$i]['channels']) / 8), | ||||
|                           ($files[$i]['bits_per_sample'] * $files[$i]['channels']) / 8, | ||||
|                           $files[$i]['bits_per_sample'] ); | ||||
| 
 | ||||
|         $out_data .= pack('C4', ord('d'), ord('a'), ord('t'), ord('a')); | ||||
| 
 | ||||
|         $out_data .= pack('V', $data_len); | ||||
|       } | ||||
| 
 | ||||
|       $out_data .= $files[$i]['data']; | ||||
|     } | ||||
| 
 | ||||
|     return $out_data; | ||||
|   } | ||||
| } /* class Securimage */ | ||||
| 
 | ||||
| ?>
 | ||||
| @ -1,6 +0,0 @@ | ||||
| Out of the box example of Securimage CAPTCHA Class.<br /><br /> | ||||
| 
 | ||||
| <img src="securimage_show.php?sid=<?php echo md5(uniqid(time())); ?>" id="image" align="absmiddle" /> | ||||
| <a href="securimage_play.php" style="font-size: 13px">(Audio)</a><br /><br /> | ||||
| 
 | ||||
| <a href="#" onclick="document.getElementById('image').src = 'securimage_show.php?sid=' + Math.random(); return false">Reload Image</a> | ||||
| @ -1,16 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| include 'securimage.php'; | ||||
| 
 | ||||
| $img = new Securimage(); | ||||
| 
 | ||||
| header('Content-type: audio/x-wav'); | ||||
| header('Content-Disposition: attachment; name="securimage.wav"'); | ||||
| header('Cache-Control: no-store, no-cache, must-revalidate'); | ||||
| header('Expires: Sun, 1 Jan 2000 12:00:00 GMT'); | ||||
| header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT'); | ||||
| 
 | ||||
| echo $img->getAudibleCode(); | ||||
| exit; | ||||
| 
 | ||||
| ?>
 | ||||
| @ -1,9 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| include 'securimage.php'; | ||||
| 
 | ||||
| $img = new securimage(); | ||||
| 
 | ||||
| $img->show(); // alternate use:  $img->show('/path/to/background.jpg');
 | ||||
| 
 | ||||
| ?>
 | ||||
| @ -1,6 +0,0 @@ | ||||
| <?php | ||||
| 	define('DB_HOST', 'localhost'); | ||||
|     define('DB_USER', 'root'); | ||||
|     define('DB_PASSWORD', ''); | ||||
|     define('DB_DATABASE', 'mibew'); | ||||
| ?>
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user