PHP: Difference between revisions
Jump to navigation
Jump to search
Line 20: | Line 20: | ||
* [[Regular Expressions in PHP]] | * [[Regular Expressions in PHP]] | ||
* | |||
=== SimpleXML === | |||
* This library is probably the best choice to do XML parsing/writing, if the operations you need are not too complex. | |||
* Very important note: cast your objects to strings when you send SimpleXML objects to functions that expect a string. Else everything will fail; SimpleXML objects are not strings. This is true with attributes or values of XML nodes. | |||
== PHP and MySQL == | == PHP and MySQL == |
Revision as of 10:43, 18 September 2007
This page will be a collection of resources on PHP programming.
Escaping / Encoding Strings
- Beware of the magic quotes for G/P/C: you may need to use stripslashes() if you don't want them. This can easily happen when you serialize something for example, and send the string to a remote server.
- Also do not forget that urlencode can be very useful. Else strings containing characters such as & will pose problems.
PHP and HTML
- In modern, UTF-8 encoded XHTML pages, use the PHP function htmlspecialchars to convert a string to a HTML compatible representation. Don't use htmlentities, which would also convert accents, and other stuff that does not need to be converted when using UTF-8. Similarly, use htmlspecialchars_decode.
PHP and File system functions
- When opening a file for reading and writing, the mode is "r+" !! Not "rw" as one would expect.
$file = fopen($filename, "r+");
Libraries
SimpleXML
- This library is probably the best choice to do XML parsing/writing, if the operations you need are not too complex.
- Very important note: cast your objects to strings when you send SimpleXML objects to functions that expect a string. Else everything will fail; SimpleXML objects are not strings. This is true with attributes or values of XML nodes.
PHP and MySQL
- The PHP MySQL extensions do *not* read the options from my.cnf to set their default connection charset, nor do they take the server charset as the default connection character set. They use the default character set from libmysql (the MySQL library), which is set at compile-time via a configure option. Generally it won't be UTF-8 (usually Latin-1).
- Exception: on Gentoo, the PHP MySQL extensions were patched to read the my.cnf configuration file, so changing values here will have an effect on the connection charset. This is the only distribution that does that (which is a good thing, in my opinion). More information available on this MySQL bug report. Note also that libmysql on Gentoo is compiled with UTF-8 as the default character set.
- Update: apparently on Windows too the configuration file my.ini would be read by the PHP extensions.
- When using MySQLi extension, persistent connections to the database are not supported which means that a database connection always dies at the end of the script execution. Apparently MySQL has some support for persistent connections, but since it is deprecated, a modern approach would be to use the PDO (PHP Data Objects) driver. This driver supports persistent connections and other advanced features.
Hints and tips
- Use bin2hex() to obtain the hexa representation of a string. Useful to debug some encoding problems.
Documenting a PHP Project: PhpDocumentor
PhpDocumentor is the equivalent of Javadoc for the PHP language.
- Installation under Gentoo:
- You can use the ebuild in Portage. However the /usr/bin/pear script is broken and must be fixed else you won't be able to emerge PhpDocumentor. In this script the PHP interpreter is called with a memory_limit argument. Thus it won't use the default memory_limit set in the /etc/php/cli-php5/php.ini file. The memory_limit argument provided in /usr/bin/pear is too low (16M), thus you have to remove it. I consider this a Gentoo/PEAR bug.
- Be sure to emerge at least PhpDocumentor 1.3.0 (currently in testing as of March 2007), as the RC versions are not stable enough.
- Usage:
- Just document your source code using the standard PhpDocumentor tags (which are very similar to the Javadoc ones). The documentation is available here.
- You can also use *some* HTML tags in your PhpDocumentor docblocks. A list is available here with their meanings here.
- Compiling the source to an output format:
- Several outputs (HTML, HTML with frames, PDF...) are available. And for each of these outputs, several templates (controlling the style - CSS - and the display of the generated documentation) are available. Some are much better than other. I recommend using the HTML:Smarty:HandS one, which can result in the following shell command:
phpdoc -d source_dir -t output_dir -o HTML:Smarty:HandS --title "This is the general title."
- Other good templates include HTML:Smarty:PHP, HTML:frames:phpdoc.de or HTML:frames:l0l33t. Note that you can also generate the documentation from a PHP script running on the web server, but I think it is more convenient to use the command line tool.
- Several outputs (HTML, HTML with frames, PDF...) are available. And for each of these outputs, several templates (controlling the style - CSS - and the display of the generated documentation) are available. Some are much better than other. I recommend using the HTML:Smarty:HandS one, which can result in the following shell command:
- Problems or things I'd like to change:
- Currently I don't know how to remove line numbers from the generated documentation, although I would prefer not to include them.
- I don't know how to tell PhpDocumentor that it is supposed to generate UTF-8 pages.