Domain: php.net
Stories and comments across the archive that link to php.net.
Comments · 1,658
-
Re:PHP used to be an ASF project
It should be noted that PHP works on Apache 2 just fine (I run it on Apache 2 on my server). That said, the PHP developers do specifically state not to use Apache 2 in a production environment. I personally have not listened, though my server is not exactly used for a lot.
;^) -
Re:PHP used to be an ASF project
It should be noted that PHP works on Apache 2 just fine (I run it on Apache 2 on my server). That said, the PHP developers do specifically state not to use Apache 2 in a production environment. I personally have not listened, though my server is not exactly used for a lot.
;^) -
this is untrue.
from the docs:
Do not use Apache 2.0.x and PHP in a production environment neither on Unix nor on Windows. -
PHP-as-CGI doesn't work on many web serversExcept PHP-as-CGI relies upon a "non standard" CGI variable (SCRIPT_FILENAME) to operate correctly, and many non Apache/IIS web servers don't provide that variable. Thus, PHP doesn't work under them.
I worked out this problem a while ago, submitted bug 28227 with fix, and it's been sitting in the PHP bug database doing nothing for months. Not only that, but many similar bugs (without fixes) were closed prematurely by the PHP team under the incorrect assumption that the submitter's system was misconnfigured, as opposed to PHP being buggy...
-
From the PHP Manualhttp://www.php.net/manual/en/faq.installation.php
# faq.installation.apache2
1. Why shouldn't I use Apache 2 in a production environment?
The following answer is based in this modified excerpt of a mail by Rasmus Lerdorf.
Apache 2 is a complete rewrite and a complete architecture change from Apache 1. It is not like going from PHP 3 to PHP 4 or from PHP 4 to PHP 5. There is a lot of code that is common, and certainly the base architecture of PHP has not changed for years. So comparing Apache 1 vs. Apache 2 to PHP 4 vs. PHP 5 makes no sense. The architecture has been proven over the years and the code, while somewhat unwieldy in places, is a known entity. PHP from the very early days was designed against this basic Apache 1 architecture and works extremely well running under it.
The major feature that draws people to Apache 2 is threading. On Windows where most basic libraries are, and must be, threadsafe, Apache 2 does actually make sense and it would be good to work out the kinks on that platform. However, on UNIX there are a lot of basic libraries where thread safety is an unknown. And this is not about PHP extensions, it is about 3rd-party libraries underneath PHP's hundreds of extensions. Whether any one 3rd-party library is threadsafe is really hard to determine. There are a lot of variables involved, including which OS, which version of the OS, which libc, which version of that libc and on some platforms even the compiler flags used to compile these things. And to make it even more fun, tracking down a thread safety problem is damn well near impossible. Hundreds of people may well state that Apache+PHP+ext/foo works perfectly for them, but maybe they are only getting about a million hits a day. Then another user comes along who gets 100 million hits a day and uses a fast dual-cpu machine and everything blows up because now suddenly the window for some tiny race condition has been made much larger due to the faster cpu speeds, the second cpu and the higher frequency of requests. And the bug report we get from this user will be something along the lines of:It don't work sometimes. Most of the times it works fine, but then every now and then it just don't. The error is different each time and I have no idea how to reproduce it, but fix it right away!!!
What can we do about these?
There are a number of (fixable) technical reasons Rasmus does not think Apache2+PHP is a good idea in a production environment, but setting those aside it really boils down to one simple concept:
PHP is glue. It is the glue used to build cool web applications by sticking dozens of 3rd-party libraries together and making it all appear as one coherent entity through an intuitive and easy to learn language interface. The flexibility and power of PHP relies on the stability and robustness of the underlying platform. It needs a working OS, a working web server and working 3rd-party libraries to glue together. When any of these stop working PHP needs ways to identify the problems and fix them quickly. By making the underlying framework more complex by not having completely separate execution threads, completely separate memory segments and a strong sandbox for each request to play in, a feet of clay is introduced into PHP's system.
Using the prefork mpm with Apache 2 to avoid the threading is possible, and yes using a standalone fastcgi mechanism to avoid the threading, too, but then defining characteristic of the web server of choice are avoided. At this point in its development, Rasmus still maintains that one is better off simply sticking with Apache 1 for serving up PHP pages with the one caveat that Apache 1 sucks pretty badly on Windows. -
Re:Beware
There are ways of providing this kind of functionality without the serverside hit.
-
PHP 5.0.3 EMPTY() and ISSET() bug
Please rate this bug important so that it gets fixed http://bugs.php.net/bug.php?id=31098
-
warning! 5.0.1 - 5.0.3 "breaks" EMPTY() function
Watch out when upgrading!
<?
$a = 'foobar';
print empty($a->nothere) ? 'empty' : 'not empty';
?>This code prints 'empty' with 5.0.1, but 'not empty' with 5.0.3.
You must check all your code for the use of empty() with a string!
I wish PHP would warn everyone about this sort of thing.
Here is the man page...nothing said about it: http://www.php.net/empty
-
Re:No comment?
They were announced before today, just read the dates.
You're probably not subscribed to any security mailing lists.
-
Re:Question/Comment"Note: Due to a problem with earlier versions of Zend Optimizer, its users are urged to upgrade to the latest version."
I can't seem to find any information on what this problem may be. No release notes or anything. Any clues?If you don't upgrade Zend Optimizer you may run into some strange foreach() behavior. See: http://bugs.php.net/bug.php?id=31134
-
Can't compile 5.0.3I've currently tried installing a version of PHP 5.0.3 over the current version of 5.0.2, but it ends failing on make:
http://bugs.php.net/bug.php?id=31104
Has anyone else run into this problem? If so, please vote on this so that it's fixed for 5.0.4
;) -
Question/Comment
Question:
"Note: Due to a problem with earlier versions of Zend Optimizer, its users are urged to upgrade to the latest version."
I can't seem to find any information on what this problem may be. No release notes or anything. Any clues?
Comment:
PHP.net's download scheme is worse than Sourceforge's if you can believe that. Therefore, here are some unPHP.net-ized URLs:
US2
Belgium
Finland2
You'll find you can actually right-click and save these and they won't prompt you for a filename "mirror" or something useless like the rest of PHP's download links. -
Question/Comment
Question:
"Note: Due to a problem with earlier versions of Zend Optimizer, its users are urged to upgrade to the latest version."
I can't seem to find any information on what this problem may be. No release notes or anything. Any clues?
Comment:
PHP.net's download scheme is worse than Sourceforge's if you can believe that. Therefore, here are some unPHP.net-ized URLs:
US2
Belgium
Finland2
You'll find you can actually right-click and save these and they won't prompt you for a filename "mirror" or something useless like the rest of PHP's download links. -
Question/Comment
Question:
"Note: Due to a problem with earlier versions of Zend Optimizer, its users are urged to upgrade to the latest version."
I can't seem to find any information on what this problem may be. No release notes or anything. Any clues?
Comment:
PHP.net's download scheme is worse than Sourceforge's if you can believe that. Therefore, here are some unPHP.net-ized URLs:
US2
Belgium
Finland2
You'll find you can actually right-click and save these and they won't prompt you for a filename "mirror" or something useless like the rest of PHP's download links. -
Microsoft Windows is the problem, not the devices.
"It doesn't seem to want to deal with text files (there is no import feature for the Palm Desktop notepad or memo pad, for example)."
You mean 'in Windows'. In the Linux and UNIX world, there are dozens of choices in how you want to talk to your Palm.
For "text files", nothing beats Plucker when carrying text, ebooks, manuals, HTML pages, HOWTO documents, and other items. The LDP even carries all of their HOWTO documents in Plucker format. Its the only format that is freely available, openly documented, and very extensible.
Just look at how beautiful Plucker is with the PHP documentation as one example...
"Also there seems to be no way to copy arbitrary files to the Palm - all files must be "owned" by an application. With a 256MB SD card I expected to use it to copy files between work and home."
You must mean '...in Windows' again. In the non-Windows side, including OSX, we have pilot-link which talks natively to your Palm and can do all kinds of things that the Windows tools cannot (including operating at 40% faster in some cases).
Commercial companies such as MarkSpace are using pilot-link (the core library of pilot-link anyway) in their commercial product, MissingSync which runs on OSX.
For desktop replacements, PIMs, and other tools, there are dozens of alternatives. Here are several, in no particular order (with Coralized links to protect the bandwidth of the various projects):
- Kpilot
- PilotManager
- J-Pilot
- Evolution (an Outlook clone)
- Multisync
There are many others, but these are the top contenders. They all also rely on the libraries and language bindings provided by pilot-link to communicate with your Palm device.
"Has anyone else noticed these or other shortcomings and have figured out ways around them?"
Yes, stop using Windows. Stop using the featureless proprietary tools provided by these vendors who only listen to their profit margins, not to their userbase.
Seriously
-
Re:Yah, good for Javascript!
-
Every single language you've mentioned there are NOT maintainable. Why? Cause they're all interpreted dynamic languages. It's fun and all to write in these languages and get stuff done with them but as soon as you spot a bug you have a hell of a time to
... blah blah ... not suitable for production systems.
This is a myth, and has been proven false countless of times, such as by these guys, or these guys, or even these guys, or, God forbid, you may have heard of these guys.
First, the term "interpreted dynamic language" is vague and misleading. Interpretation has nothing to do with code maintainability. (You can interpret C, and you can compile putatively interpreted languages such as Java and Python to native code; indeed Java has been natively compiled for years, and the fact that it is just-in-time compilation is irrelevant).
And what does "dynamic" mean? Do you mean a dynamically, as opposed to statically, typed language? Do you mean runtime introspection? Self-modification and metaprogramming? Runtime name resolution? What? I suspect you mean a combination of these. Python, Perl, Ruby, JavaScript, PHP, Haskell, Lisp and OCaml have these features. C++ can be considered a "dynamic" language, as can Java, C#, etc. So why do you claim that these languages are not maintainable?
These newfangled languages are more rapid to develop in than lower-level languages. Maintenance is simpler because the languages are simpler, higher-level and more easily maintained. For example, the absence of a separate compile/link cycle means I can get from changing a source line to testing the source line quicker.
In many cases, reproducing or debugging a bug is simpler in, say, Python than in C, because the infrastructure itself is simpler. Pure Python, for example, does not have memory access violation errors; there's no way your Python code can read or write an invalid pointer, write beyond the end of a buffer and so on; a whole class of pointer errors, most of which have security repercussions, are annihilated by this feature. Similarly, Python uses exceptions, so nobody can forget to check and propagate a function's error return value.
More often than not, errors that surface in these languages are high-level problems, which is good, because those are simpler than the ones involving someone forgetting to call free() on an allocated buffer or accounting for overflow when shifting a bit mask.
The uncertainty involved in the dynamic typing/late binding model of such languages is compensated for through unit testing.
Oh, and JavaScript, a "dynamic language", is being used by Google in a production system, and Google is known to use Python and Ruby in their systems. I suggest you call them up and tell them their languages aren't suitable.
-
Every single language you've mentioned there are NOT maintainable. Why? Cause they're all interpreted dynamic languages. It's fun and all to write in these languages and get stuff done with them but as soon as you spot a bug you have a hell of a time to
-
Re:LAMP
Actually, there is a native extension that does database abstraction. There is also an other one coming up for PHP 5 (probably 5.1) called PDO.
-
Re:I've already seen one post dissing code generat
I love using code generation. About 9 months ago, I wrote an object oriented data access layer generator for
.net. The code it made was somewhat messy, but the interfaces were clean, and it saved me a lot of time. Even more importantly, all of the manually written code was much more readable as a result of the extremely standard OO data access libraries. I heard the next version of .net was supposed to come with some kind of code generation for data access layers in the standard tools.
About four months ago, I discovered PHP/Pear's DB_DataObject which is pretty cool. It is missing some features I had in mine, but it makes up for it by being incredibly easy to use. Now I've set up a protected page on our website at work that allows anyone to regenerate the entire data access layer at the click of a button. I hardly ever have to write sql and, more importantly, it makes things much easier on the programming light-weights. -
Re:PHP vs Java in general question.
It's mainly the on-the-fly Apache model, but PHP has included a CLI interpreter for a while (initially so you could use it for shell scripting). People have expanded on that to let you write whole GUI programs, via GTK bindings. It's not mature, but it's possible. See http://gtk.php.net/
-
PHP dabase APIsIt's true that, unlike in Java (JDBC) or Perl (DBI), the most-common idiom for database development in PHP uses database-specific function-calls. However, porting an application to a different database often requires rewriting code anyway, and a lot of the functions are so similar that one could make the change with search-and-replace; look at these pages in the PHP documentation:
-
PHP dabase APIsIt's true that, unlike in Java (JDBC) or Perl (DBI), the most-common idiom for database development in PHP uses database-specific function-calls. However, porting an application to a different database often requires rewriting code anyway, and a lot of the functions are so similar that one could make the change with search-and-replace; look at these pages in the PHP documentation:
-
PHP dabase APIsIt's true that, unlike in Java (JDBC) or Perl (DBI), the most-common idiom for database development in PHP uses database-specific function-calls. However, porting an application to a different database often requires rewriting code anyway, and a lot of the functions are so similar that one could make the change with search-and-replace; look at these pages in the PHP documentation:
-
PHP dabase APIsIt's true that, unlike in Java (JDBC) or Perl (DBI), the most-common idiom for database development in PHP uses database-specific function-calls. However, porting an application to a different database often requires rewriting code anyway, and a lot of the functions are so similar that one could make the change with search-and-replace; look at these pages in the PHP documentation:
-
Re:Is it just me
[PHP doesn't offer] the ability to respond to a HEAD or PUT request, not just POST and GET
Well, that it does offer. Dealing with a HEAD request: buffer the generated contents, and only send the headers. A PUT request? No problem.
Just beacause you don't know how to do it, doesn't mean it can't be done. (No offence.)
-- Arien -
Re:Is it just me
[PHP doesn't offer] the ability to respond to a HEAD or PUT request, not just POST and GET
Well, that it does offer. Dealing with a HEAD request: buffer the generated contents, and only send the headers. A PUT request? No problem.
Just beacause you don't know how to do it, doesn't mean it can't be done. (No offence.)
-- Arien -
Re:Is it just me
[PHP doesn't offer] the ability to respond to a HEAD or PUT request, not just POST and GET
Well, that it does offer. Dealing with a HEAD request: buffer the generated contents, and only send the headers. A PUT request? No problem.
Just beacause you don't know how to do it, doesn't mean it can't be done. (No offence.)
-- Arien -
Re:Working link
Parse error: parse error, unexpected '<' in
/usr/local/wwwcache/groklaw/staticpages/index.php( 78) : eval()'d code on line 1Somebody tell Groklaw that eval is bad, mmmkay?
(Choice quote: "If eval() is the answer, you're almost certainly asking the wrong question. -- Rasmus Lerdorf, BDFL of PHP")
-
Re:Rank them by importance
Anyone with a brain strips html tags (or any tags for that matter) first before doing text searches. You bypassing the forum's filter is simply because the coder was lazy. In php, this can be done in one lineIn perl its nearly just as easy.
Regards,
Steve -
Re:PHP - poor designActually, a careful reading of my post shows that being able to do it in PHP is not logically necessary to my point
:-) But it is good that PHP can do that, although passing the function by name is another smell.... hmm, let me see... oh, poor scoping ability, which limits the ability (no relevant hits on PHP closure) to use closures (link to a Perl FAQ because it's the best resource I found in 30 seconds; Python, Javascript, and a wide variety of other languages use them). Fortunately, that's not so killer now that PHP has at least some OO support. (You can usually use support for closures or classes to hack enough support for the other to get by.)
As for "bad variable names", note that in Perl, $a and $b in the sort function are actually mandated by the language... well, sort of, kind of, close enough; "man perlfunc" and look for "sort" for the details. Everything else is a free choice, and short examples call for short names. I guarantee you I haven't written "array" as a variable in many, many years, unless that was absolutely the best name. (And for things like sorting functions, it sometimes is.)
Indentation is via "ecode":an ecode block
although it still apparently is a bit kooky, as you can see.
four spaces of indentation
eight spaces of indentation
no more -
Re:Somebody Explain Wikis, Please
I took a while figuring out the whole Wiki thing, too...They are a difficult concept.
Installing TikiWiki and poking it with a stick was educational for me...you may find it to be as well. This bit of software will help tremendously as well.
Basically, the easiest way I've found to think of a Wiki is as a collaborative mind map, if such a thing is possible. I believe they are an attempt to store information in an even more context-specific way than the conventional Web, and in a manner which as closely as possible resembles that of an actual brain.
The other thing about Wikis is that they're lightning fast to write. Although HTML/XHTML aren't what you'd call rocket science, they're still sufficiently complex that it can be a pain to have to write out all the tags. With a Wiki, (http://www.yahoo.com|Yahoo!) will put a basic link in a page, but without an alt tag of course.
The main audience I've seen using them myself are FPS game mod programmers, although I know a lot of other people of course do as well. But the reason why they're a boon to the UT or Quake mod crowd in particular is because it basically allows them to write pages in two parts.
a) Textbook definition of class XYZ, what it does etc. (The theory)
b) Another section lower down where people can put war stories about experiences they've had actually coding with said class, examples of how to do it, or corrections/clarifications of elements of the definition. (The practice)
In this example, it's actually fairly similar to what php.net has for its documentation, except a wiki is probably a bit more specifically designed for that from the ground up.
Hope this helps... -
Learn PHP without a book
-
Learn PHP without a book
-
Re:What ever
-
Re:PHP or Perl?
"right" is relevant. According to the PHP docs, only the recursive acronym is correct now.
-
Re:PHP "documentation" is CRAP!
"documentation"? Yes, I'm *sure* that it's all with ramblings of the programmers.
I'm sorry, but that's like a troll at it's finest. Granted, SOME pages have issues, but I have yet to find a PHP doc page where if the actal 'documenation' was insufficient, the users didn't comment/correct/fix. -
Re:PHP "documentation" is CRAP!
"documentation"? Yes, I'm *sure* that it's all with ramblings of the programmers.
I'm sorry, but that's like a troll at it's finest. Granted, SOME pages have issues, but I have yet to find a PHP doc page where if the actal 'documenation' was insufficient, the users didn't comment/correct/fix. -
Re:Two free books on PHP
If you have previous programming experience just go through the PHP Manual on their website, that's all you really need if you're trying to pick it up real quick and know how to program.
-
Re:ASP.NET and PHP5 explained
How aggressively backwards compatible? It has been my understanding that a LOT of stuff written under PHP4 will not work under PHP5 without significant rewrites, and that there are no intentions of adding in that back capability. I have not yet seriously tried using PHP5 as yet largely because of this. Can you clarify?
You can see Backward Incompatible Changes and new keywords for the things that may cause problems for you.
The biggest issues I can forsee is if you currently use some of the new keywords in your old code. (but I haven't messed with PHP5 yet) -
Re:ASP.NET and PHP5 explained
How aggressively backwards compatible? It has been my understanding that a LOT of stuff written under PHP4 will not work under PHP5 without significant rewrites, and that there are no intentions of adding in that back capability. I have not yet seriously tried using PHP5 as yet largely because of this. Can you clarify?
You can see Backward Incompatible Changes and new keywords for the things that may cause problems for you.
The biggest issues I can forsee is if you currently use some of the new keywords in your old code. (but I haven't messed with PHP5 yet) -
honest question here...With a language like PHP that has a very active developer community associated with it, why plop down for a book like this when websites like THIS ONE exist and give all the documentation that you'd need when learning the language? I realize that it's handy in having a hardcover book to read (hell, I've got my fair share right next to my unemployed ass) and reference...but still.
Just curious.
-
mysql_pconnect
And that's the problem with mysql_pconnect, IMHO... I recommend using mysql_connect because if you get slashdotted, at least the connections are not persistent (meaning you get more of them). I was slashdotted a while ago and my code held up using mysql_connect();
-
mysql_pconnect
And that's the problem with mysql_pconnect, IMHO... I recommend using mysql_connect because if you get slashdotted, at least the connections are not persistent (meaning you get more of them). I was slashdotted a while ago and my code held up using mysql_connect();
-
Zero tolerance for errors
I've been coding for some time very extensively using PHP. It, along with GTK is a good, high-level language that lets me get lots done, very quickly.
In many cases, it will accomodate common errors, such as strings not being quoted, etc seemingly without complaint.
However, I recently changed my strategy to one of "zero tolerance", which entailed me reducing the error reporting threshold to 0 (all errors) as well as defining a standardized error handler callback function. I spent about a month just going thru the existing codebase to quote all the strings, etc.
However, now having done paid that price, I'm quite surprised at how often bugs that would have previously gone un-noticed pop out in clear view.
Undefined variables previously translated to equal false now stand out as a mis-spelling. Database errors previously un-noticed suddenly highlighted and shown to me. Hiccups in the code previously shown to users now archived and hidden away so that I see them instead.
It's made a HUGE difference - I'm more productive despite the appearance of having more to look out for!
I also have a generic error() function defined that's really a wrapper for the error handler - so the error logging system now in place works for language errors and logic errors alike.
It's awesome! -
Zero tolerance for errors
I've been coding for some time very extensively using PHP. It, along with GTK is a good, high-level language that lets me get lots done, very quickly.
In many cases, it will accomodate common errors, such as strings not being quoted, etc seemingly without complaint.
However, I recently changed my strategy to one of "zero tolerance", which entailed me reducing the error reporting threshold to 0 (all errors) as well as defining a standardized error handler callback function. I spent about a month just going thru the existing codebase to quote all the strings, etc.
However, now having done paid that price, I'm quite surprised at how often bugs that would have previously gone un-noticed pop out in clear view.
Undefined variables previously translated to equal false now stand out as a mis-spelling. Database errors previously un-noticed suddenly highlighted and shown to me. Hiccups in the code previously shown to users now archived and hidden away so that I see them instead.
It's made a HUGE difference - I'm more productive despite the appearance of having more to look out for!
I also have a generic error() function defined that's really a wrapper for the error handler - so the error logging system now in place works for language errors and logic errors alike.
It's awesome! -
Re:Protecting the Monopoly
they offered IE for free in the hope that they could "embrace and extend" the internet - stopping all other browsers, and thereby stopping all other platforms - but it didn't work. so why should they bother any more?
Imagine what they COULD have done by leveraging IE into developing weblications!
The biggest problem with web-based anything is the lack of control you have over the browser. Not coincidentally, this is why development time for web-based applications is quick - the application output is very simple.
For example, I've written a medium-sized application (~40,000 lines) in PHP-GTK and love the control I get over the client experience in the application. User chooses X, I pop up a dropdown list to get more information, pop up an editor that captures their input in real time, etc....
It's hard to impossible to do all this with javascript, but it's sort of what I'm talking about.
Take javascript, make it 10x more powerful, and provide some security measures.
For example, a certificate that would have to be installed in the browser first before scripts from NNN site would operate. Control the distribution of the certificates, and you control access to the application! You could use a bi-directional certificate so that both sides authenticate each other!
Run this over HTTPS and you'd have a damn secure application framework that would allow for:
1) Rapid application development times - On the server it'd be a set of ASP/PHP style scripts.
2) Rich client-ish interfaces that make XUL look tame.
3) Secure by design. Your scripts would only be accessable to somebody with a valid certificate.
4) If sufficiently developed, the javascript replacement could operate offline merely by saving the script to disk. (stretching things a bit, here)
In short, all the advantages of web-based design with all the advantages of client-side design. What's not to like?
They botched it with ActiveX, but it was an attempt at what I'm talking about. Can you imagine trying to fight that?
Java comes close to the above - but it lacks the security features I'm mentioning, and it's operational characteristics are "heavy" - the JVM is large and slow, particularly in low-memory situations.
-
Re:How Dogbert would handle this
-
Re:Any reccomendations?
php.net was a comprehensive reference last time I looked. The readme included with the binaries will get you up and running in no time.
If this book is any thing like Welling and Thompson PHP and MySql Web Development, appealing to the lowest common denominator will make it a tedious read for experienced programmers. -
Re:I still don't get...
"I've never figured out how one could make a secure PHP program on a multi-user system. All PHP scripts run using the web server's perms, not the programmer's. Which means all data files must be writable and all SQL passwords must be readable by the web server."
"The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren't very realistic, many people, especially ISP's, use safe mode for now."
PHP -
Re:Switch from asp - php(5)
I haven't read the book, but i myself code asp at work and php for hobby.
The first web-scripting language i learned was asp, mainly becouse i'm a windoze idiot and i liked IIS. At my work we used asp & access in the beginning, then moved over to MS SQL server. Then i studied php and switched over to Apache+php (mysql) on my home-server. Nowadays i only code asp at work, everywhere else i use php. And my boss switched over to a linux server with apache + Chilisoft! ASP (now Sun) and mysql.
I didn't have any bigger problems learning php. One reason can be that i have no problems reading code, even if it's written in COBOL. The web-manual is the best tool, and it's the only resource that i have used. Start with some tutorials and small examples, just Google around!
I started here:
http://fi2.php.net/manual/en/tutorial.php
And to get some examples to study (and copy&paste in the beginning..) navigate to:
http://www.hotscripts.com/PHP/index.html.
Learn PHP, you life will never be the same again ;-) -
My PHP reference...
All you need.
Includes all the functions, too. Without advertizements.