QuicksearchShow tagged entriesCategories |
Tuesday, November 3. 2009
Multiple PHP versions on one webserver Posted by Mark van der Velden
in Apache, PHP, PlanetPHP at
08:39
Comments (7) Trackbacks (0) Multiple PHP versions on one webserverIntroductionThis is a blog about running two PHP versions on one webserver and using multiple php.ini files, this combination can be a tricky one to tackle. But luckily one we can tackle quite easily as long as one of the PHP versions is >= 5.2.7. For this example I'll be using Apache, but the webserver flavor doesn't really matter. The most important part is the "PHP_INI_SCAN_DIR" environment variable. The whyThere could be a number of reasons to want what I'm about to talk about. In my case I have a project where I have a legacy code-base, running on a specific PHP version, and a new code-base which will be run on 5.3. Because the new code-base will be a ongoing progress of replacing the old, it first has to run side by side with the legacy code-base. So I wanted my development image to run two PHP versions. The old code-base used php.ini settings such as a include-path, error reporting, etc. Which will be different from the new code-bas, and those can no-longer be set with the 'php_value' feature of Apaches since the PHP version we'll be using for that runs as (f)CGI rather then as module. Sunday, October 11. 2009
Multiple backend session storage handler Posted by Mark van der Velden
in PHP at
11:17
Comments (0) Trackbacks (0) Defined tags for this entry: backend, driver, loadbalancing, php, session handler, session_set_save_handler, state, write trough
Multiple backend session storage handlerRecently I got asked if I knew about a system that supports multiple session back-ends at once. I didn't know about one and since it's not rocket-science I decided to spent a few hours and whoop something up. For the impatient, checkout: http://github.com/Dynom/SessionHandler What does it do?It is a drop-in high-availability storage back-end for PHP sessions by offering a redundant session storage system. It's as easy as including the lib, define the drivers you want to use (e.g. Memcache and MySQL) prepare their configuration/installation and done. If you already have a MySQL server and a Memcache instance running you can set it up in about 5 minutes. It's also easy to extend and write new drivers, just extend the template class and fill in the blanks. Continue reading "Multiple backend session storage handler"Friday, September 25. 2009The PHP Quiz seriesI like solving puzzles, probably one of the reason why I like programming as much as I do. I also like finding challenges and experimenting, as such I came to the idea to start the PHP Quiz series. They contain typical combination of PHP quirks and lesser known features of PHP. The reason behind the quizzes is not to advocate bad or good coding practices, but it's intended to let you find out the why in all of it. I believe that by understanding what happens it can make you a better programmer and you might spot bugs easier then without knowing what happens. The series are not ordered in level of difficulty but merely in the order that I found out about them, thought about them or where simply sent in. But in general I think it's safe to say that your knowledge of PHP should be quite a leap forward from novice before you can answer most questions. This however doesn't mean that, once you can do the quizzes flawlessly, that you are a superior programmer. There is a big different between knowing how to design an application and knowing why $array = array(1,1) + array(2,2) only results in an array with two elements. An overview of all the PHP Quizzes: http://blog.dynom.nl/categories/PHPQuiz_12
-D Monday, September 21. 2009
PHP Quiz part 3 Posted by Mark van der Velden
in PHP, PHPQuiz, PlanetPHP at
17:35
Comments (2) Trackbacks (0) Defined tags for this entry: form, php, php quiz, phpquiz, planetphp, precedence, references, string, unset cast
PHP Quiz part 3Welcome to another part of the PHP Quiz series, again some interesting questions to crack your brain about. If you have some nice additions or questions, be sure to leave a comment. Enjoy part three! As always, think of the answer before you execute the code or look it up. You can find round two here. Unset castWhat is the type of $a and what is the type of $b Form funWhat will the output be? <form method="post" action="" enctype="text/plain">
<input name="search" type="text"> <input type="submit"> </form> <?php error_reporting( E_ALL ); echo (string) filter_input(INPUT_POST, 'search'); ?> Fun with stringsStrings in PHP are versatile, but how versatile are they... What will the output be? $juggling = "Itffkhmf";
Continue reading "PHP Quiz part 3"$rox = "Spy"; $b = $c = ""; for ($i=0; $i<strlen($juggling); $i++) { $b .= $juggling[ $i ]; $b++; } for ($i=0; $i<strlen($rox); $i++) { $c .= $rox[ $i ]; $c--; } var_dump( $b, $c ); Thursday, June 25. 2009
Did you know... part two Posted by Mark van der Velden
in PHP, PlanetPHP at
19:14
Comments (0) Trackbacks (0) Did you know... part twoIn these blog series I'd like to talk a bit about some "Did you knows". These series contain information I came across along the way and I mention them here to give you insight or just to make you aware of it's existence. The information is by no means in chronological order and mostly not even covering "state of the art" or "brand new" items for that matter. Some are directly code related, others are just brief descriptions. Basically it's just a pile of PHP and web related information. You can find part one here. Continue reading "Did you know... part two"Thursday, May 14. 2009
PHP Quiz part 2 Posted by Mark van der Velden
in PHP, PHPQuiz, PlanetPHP at
10:41
Comments (10) Trackbacks (0) Defined tags for this entry: arrayaccess, nesting structures, operator precedence, php, php quiz, phpquiz, planetphp, references
PHP Quiz part 2A short quiz this time, but that doesn't make it less fun. Do you know the answer to all of them? Get a cup of coffee and kill 10 minutes with round two... As always, think of the answer before you execute the code or look it up. You can find round one here. Array pointerWhat will the output be ? ArrayAccess and isset funisset or not isset, thats the question. $a = new ArrayObject;
$a['fubar'] = NULL; $null = NULL; if (isset($null)) { echo 1; } else { echo 2; } if (isset($a['fubar'])) { echo 1; } else { echo 2; } if (array_key_exists('fubar', $a)) { echo 1; } else { echo 2; } Typo?The output might be confusing.. ReferencesHow many notices will be thrown? Wednesday, April 15. 2009
Zend framework reminders Posted by Mark van der Velden
in PHP at
15:00
Comments (0) Trackbacks (0) Defined tags for this entry: php, zend framework
Zend framework remindersHere a few of those "how did that work again" things, in Zend framework. Mostly for myself but hey, I'm not greedy. If you know some new/nifty ones, feel free to leave a comment! Loading a view from a different directorypublic function someAction() { // Option one $titleView = new Zend_View(); $titleView->setScriptPath( APPLICATION_PATH .'views/scripts/'); // Option two $titleView = new Zend_View(array('scriptPath'=>APPLICATION_PATH .'views/scripts/')); $viewResult = $titleView->render('_my_view_script.phtml'); } Tuesday, November 11. 2008
Did you know... part one Posted by Mark van der Velden
in PHP, PlanetPHP at
21:59
Comments (0) Trackbacks (0) Defined tags for this entry: @, datetime, empty, mod_expire, mod_headers, pecl_http, php, planetphp, scream, shutup, webgrind, writable directories
Did you know... part oneIn this blog post I'd like to talk a bit about some "Did you know's". With these "Did you know" blog posts I want to tell you a few things that I came across along the way and hopefully you know some I don't know yet! Some DYK's are directly code related, others are just here to give you insight and some are just to let you know of it's existence (Afteral you don't search for what you don't know about.) So here they come in random/chaotic order: Writable directoriesNot so PHP specific, but often miss-used is checking for writable directories/paths. Directories don't have to be readable to be used for writing, but they do have to be writable and executable. So a check like this, is simply incomplete: And will simply fail if the directory is writable but has no execute attributes (mode 0666). This is especially trouble, and can keep you occupied for a long time when using the shutup (@) parameter... Form name attribute character conversions
Friday, October 24. 2008
Best practices, part one Posted by Mark van der Velden
in PHP, PlanetPHP at
17:11
Comments (6) Trackbacks (0) Defined tags for this entry: array fun, condition order, documentation, notices, php, planetphp, variable naming, warnings
Best practices, part oneBest practices are ways of solving problems in a good way, these practices change over time and can depend on versions. A lot of people who have their roots in PHP4 have habits that are no longer best practices. But not just them, a lot of developers don't apply best-practices rules. In this blog post I'd like to point out a few reminders or refreshing points for you to take in. Most you will probably know but some you might not know or didn't look for. If you know some nice additions, make a comment and I'll add it. Enjoy! Friday, October 24. 2008
Be careful with double extensions Posted by Mark van der Velden
in PHP, PlanetPHP at
13:43
Comments (0) Trackbacks (0) Be careful with double extensionsSince I'm on a 'finish blog drafts' spree, I might as well publish this one also. I actually had it in draft for about 5 months now anyway. In most upload tools files are checked on extensions only, while it might seem pretty solid it's actually not as safe as you might think. Especially in combination with Apache and mod_mime. When you do: However when you try something like this: Before you get all excited, the scenario when this happens is not likely to happen, because it only works for unknown file extensions. So basically, this can only happen when you work with black-listing rather then white-listing. And when checking files, you shouldn't be black-listing in the first place. Let's go into detail about the why. Continue reading "Be careful with double extensions" |
Calendar
|
|||||||||||||||||||||||||||||||||||||||||||||||||
