Information for Developers
You can access our Bugzilla database here. We welcome any bug reports and feature requests, so long as they are understandably written and flagged correctly (mostly an issue of setting the severity between enhancement; trivial; minor; normal; major; critical; or blocker levels, although you can also set the priority as well if you'd like). You can see a great set of bug-writing guidelines here.
You are also advised to search for similar reports to avoid duplication.
We're always happy to receive patches, whether for contribution to a project or for general community availability on the forums. The one thing we do ask is that you provide the patch in Unified Diff format. If you are using our git instructions to work with the application codebase (highly recommended), you can create unified diffs via git using the following command:
git diff -u ./ > patch.diff
... which will find all differences in the working directory and recursively, and write them to a file called patch.diff.
If you want to apply a patch, download it to your development environment, and from the application's root directory and run
patch -p0 < ./path/to/patch.diff
The --dry-run option to the patch tool allows you to safely test the patch to see if it will apply cleanly, and if not, where the conflicts will arise.
For more Windows (and general) information, also see this forum thread.
Setting up a flexible development environment
NB: This is not a beginner's installation/configuration tutorial. We only highlight a few important differences from a standard installation as a help for experienced PKP, database, PHP and web server users.
Install and Configure Databases
- There is nothing special to the database installation. Use your OS' standard installation procedure to install the necessary databases you want to test in parallel.
- Edit config.inc.php to switch the database connection.
Install and Configure supported PHP versions
- Download or build the PHP binaries you want to test (newer versions can be downloaded from php.net or are part of the standard OS distributions, older versions must be built from source).
- You'll need the thread-safe version if you want to test mod_php in Apache.
- Install all binaries and configuration separately. Do not create any shared files or configuration (separate php.ini, separate installation directories).
- On Windows:
- Get the PHP zip arquive distributions where available and unzip them into separate folders.
- XAMPP has lots of old Windows binaries if the version you look for is no longer officially supported on php.net.
- Download the thread-safe VC6 version as VC9 versions are not compatible with Apache.
- Do not install DLL files in C:\WINDOWS or any other directory on the path.
- Do not install any registry keys.
- Do not configure any shared environment variables.
- Exception: Install PEAR in a central folder that is accessible by all PHP versions. Install necessary PEAR dependencies (e.g. PHPUnit, etc.) - see separate documentation on this Wiki for that.
- Edit the development php.ini files as required:
- extension_dir must point to the absolute path of the version specific extension binaries
- enable extensions required by PKP software (e.g. database client, GD, etc.)
- optional: error_reporting, display_errors, log_errors, error_log, max_execution_time, xdebug
- Test all PHP installations separately: /path/to/php -c /path/to/php.ini -v (This should discover most problems with wrong extension paths).
Install and Configure Apache
We use Apache so that we can test CGI, FCGI and Module configurations in parallel. Install Apache 2.2 (standard distribution for your OS). Then get and install mod_fcgid as explained on the linked web pages.
All the magic lies in Apache's httpd.conf. Here's the Windows version. It should be easy to adapt that to your specific OS:
#General CGI Support <IfDefine CGI> LoadModule cgi_module modules/mod_cgi.so AddHandler application/x-httpd-php .php </IfDefine>
#General FCGI Support <IfDefine FCGI> LoadModule fcgid_module modules/mod_fcgid.so AddHandler fcgid-script .php <Directory "C:/path/to/your/pkp/doc/root"> Options +ExecCGI </Directory> </IfDefine>
#PHP 4.3 support <IfDefine PHP43> <IfDefine CGI> Action application/x-httpd-php "/php-cgi/php.exe" ScriptAlias /php-cgi/ "C:/path/to/php43/" <Directory "C:/path/to/php43"> Order allow,deny Allow from 127.0.0.1 </Directory> </IfDefine> </IfDefine>
#PHP 5.2 support <IfDefine PHP52> <IfDefine MODULE> LoadFile "C:/path/to/php52/php5ts.dll" LoadFile "C:/path/to/php52/libmysql.dll" # This is required (PHP52 only) otherwise PHP might load libmysql.dll from MySQL's own bin LoadModule php5_module "C:/path/to/php52/php5apache2_2.dll" PHPIniDir "C:/path/to/php52" </IfDefine>
<IfDefine FCGI> FcgidWrapper "C:/path/to/php52/php-cgi.exe" .php </IfDefine>
<IfDefine CGI> Action application/x-httpd-php "/php-cgi/php-cgi.exe" ScriptAlias /php-cgi/ "C:/path/to/php52/" <Directory "C:/path/to/php52"> Order allow,deny Allow from 127.0.0.1 </Directory> </IfDefine> </IfDefine>
#PHP 5.3 support <IfDefine PHP53> <IfDefine MODULE> LoadFile "C:/path/to/php53/php5ts.dll" LoadModule php5_module "C:/path/to/php53/php5apache2_2.dll" PHPIniDir "C:/path/to/php53" </IfDefine>
<IfDefine FCGI> FcgidWrapper "C:/path/to/php53/php-cgi.exe" .php </IfDefine>
<IfDefine CGI> Action application/x-httpd-php "/php-cgi/php-cgi.exe" ScriptAlias /php-cgi/ "C:/path/to/php53/" <Directory "C:/path/to/php53"> Order allow,deny Allow from 127.0.0.1 </Directory> </IfDefine> </IfDefine>
<Directory "C:/path/to/your/pkp/doc/root"> Options +FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
Now all you need to switch configurations is starting Apache like this:
http -D(PHP43|PHP52|PHP53) -D(MODULE|CGI|FCGI)
A few examples:
http -DPHP43 -DCGI http -DPHP52 -DMODULE http -DPHP53 -DFCGI