FastCGI, PHP, Symfony2 with basic auth not working

Just had a little issue that seams to be common in the web. Got a new server with Plesk 11 (sorry for that) and it took me nearly a day to get it working and setup for capifony deployment of Symfony2 projects.

The typical issues with not correctly set access rights for the root directory of the project (should be 755), manually editing of parameters.ini and other stuff was ok. But what nearly killed me was that my Plesk installation always returned a 503 when running PHP as apache module. FastCGI was default and seemed to be working, so I went with this.

Unfortunately this did not work with the admin interface that was running in a “virtual” subdirectory. It was not possible to login. In the background it is using the default, simple, boring and potentially unsecure basic authentification.

Did you know that there is a problem with FastCGI, Symfony2 and basic authentification? I did not, but know I know. It is fixed in the current release (2.0.16) – which is good. But unfortunately there is a RewriteRule that has to be written inside your web/.htaccess. Check the comment in src/symfony/src/Symfony/Component/HttpFoundation/ServerBag.php:

* php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default
* For this workaround to work, add this line to your .htaccess file:
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
*
* A sample .htaccess file:
* RewriteEngine On
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Unfortunately, I tried a different line that was written in the ticket above:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

This did not work, but resulted in 401 results for all requests. Just remove the ,l which means that this .htaccess file will be left.

So if you are running a Symfony2 project with FastCGI, add this line to your web/.htaccess file:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

search files by content text using find and grep

Image

This post is about a simple task – but I always forget the syntax. Search recursively for files inside the current directory with a special text in the file content.

find . -name "*.*" -print | xargs grep "SEARCHTEXT" --color=auto

This snippet searches for all files of the current directory that match the name parameter *.* (so you could e.g. search for all .css files with -name “*.css”). The result is displayed with grep – using the nice color-highlighting.

This is especially useful for remove access on linux machines or other unix-based devices.

CsvIterator – csv/tsv import class

About the CsvIterator class

The class CvsIterator.class.php imports and reads csv files – but also other files that have a similar format with a defined separator / delimiter as e.g. a semicolon ; or a tab t or a comma , . Also, enclosures as e.g. quotation marks ” are supported.

Features of CsvIterator class

  • Reads csv, tsv files
  • Supports headers, returns the rows as named arrays with the appropriate header column name as key
  • Iterator – like functionality
  • Can be used to read other/custom formats with different delimiters as e.g. pipe | easily
  • It even supports enclosures as e.g. quotation marks “
  • Copy – include – run – usage
  • Requires at least PHP 4.3, no special library necessary

Download the csv / tsv php import class

CsvImport Release 1.1
License: GPL

How to read and import a csv file

include('CsvIterator.class.php');
$csvIterator = new CsvIterator('/path/to/file', true);
while ($csvIterator->next()) {
print_r($csvIterator->current());
}

This code example opens a file in csv format, located at /path/to/file, that contains a first row with a header / description of the csv rows.

How to read and import a tsv file

include('CsvIterator.class.php');
$csvIterator = new CsvIterator('/path/to/file', true, "t");
while ($csvIterator->next()) {
print_r($csvIterator->current());
}

This code example opens a file in tsv (tab-separated values) format, located at /path/to/file, that contains a first row with a header / description of the csv rows. The separator / delimiter is – of course – a tab, encoded as t.

How to read and import a custom format

Assuming that your files have the following format: the entries are separated by a pipe |, each entry is enclosed with quotation marks “” as the first and last character.
A example row would look like "value1"|"value2 that can even contain a pipe | or other characters".
The import code would be the following:
$csvIterator = new CsvIterator('/path/to/file', true, '|', '"');
while ($csvIterator->next()) {
print_r($csvIterator->current());
}

That’s it!

Please leave a comment or link to this page if you like it!