Increase fastCgi / PHP activityTimeout in IIS7

When your have installed PHP with the Microsoft web platform installer PHP is installed in C:\Program Files (x86)\PHP\v5.2.
When your PHP script runs longer than 10 minutes (600 seconds) you will get an 500 Internal server error.
To fix this issue you will need to increase the fastCgi activityTimeout in IIS7.
After Googling around i found a solutions, but because the web platform installer installs PHP in a path with spaces in it all examples failed.
I Googled some more and after a while i combined 2 solutions and got it to work.

Start a command promt and go to this folder:
c:\Windows\System32\inetsrv

Execute this command to see the current settings:

C:\Windows\System32\inetsrv>appcmd list config -section:system.webServer/fastCgi

Output will be something like this:

<system.webServer>
<fastCgi>
<application fullPath="C:\Program Files (x86)\PHP\v5.2\php-cgi.exe" monitorChangesTo="php.ini" activityTimeout="600" requestTimeout="600" instanceMaxRequests="10000">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
<environmentVariable name="PHPRC" value="C:\Program Files (x86)\PHP\v5.2" />
</environmentVariables>
</application>
</fastCgi>
</system.webServer>

To change the timeout to 1 hour (3600 seconds) execute the following command:

C:\Windows\System32\inetsrv>appcmd set config -section:system.webServer/fastCgi "-[fullPath='C:\Program Files (x86)\PHP\v5.2\php-cgi.exe'].activityTimeout:3600"

Not the use of double and single quotes to specify the correct parameters.
After you run this command you will see this output:

Applied configuration changes to section "system.webServer/fastCgi" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"

After running the list config command again the output now looks like this:

<system.webServer>
<fastCgi>
<application fullPath="C:\Program Files (x86)\PHP\v5.2\php-cgi.exe" monitorChangesTo="php.ini" activityTimeout="3600" requestTimeout="600" instanceMaxRequests="10000">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
<environmentVariable name="PHPRC" value="C:\Program Files (x86)\PHP\v5.2" />
</environmentVariables>
</application>
</fastCgi>
</system.webServer>

As you can see the activityTimeout is now increased.
Restart your IIS service and your good to go.

No Comments »

Connect to Windows Samba share on Mac OSX with SSH

After some googling around i found this post. It's a very clear howto on connecting to a Windows Samba share on your Mac OSX with SSH. For example your NAS at home from any other location.
I copied it to my own site to be sure it stays on the web.

All credits go to the author.

Chances are if you are seeing this, you've tried quite a bit but it hasn't worked. Look no further. If you are seeing this and haven't been researching it, then this should still be enough info to get a good start.

First, here's the point: Using windows file sharing (Samba/SMB) is a good way to access your files across your home network, but don't even think about trying it over the internet. In order to access SMB shares across the internet you're going to need to get creative. A method which works reasonably well is using a zero-configuration VPN program such as Hamachi, Remobo, Wippen, etc. to create a virtual lan connecion, thus fooling your computer into connecting like you were on the same lan. That works, but in my experience it isn't very reliable, it has limitations, it has overhead, and it means you have to have that ZCVPN client on both ends. So here's my solution, skip the program, jump straight to the solution. If you use an SSH tunnel to connect to your computer, you can access your SMB shares, you can use VNC to view your screen, or do just about anything that uses a port on your host computer. The best part about it is, once you have it up and running, it's really simple to use!

Note: This post will assume that your "server" machine is running windows and your "client" machine is running Mac OS X Leopard.

Here's how to do it:

1. Enable file sharing on your host computer (I'm going to assume this is running Windows). This will allow your files to be shared across your local network. If you don't know how to do that, there's a very good guide Here.

2. (Optional) Disable simple file sharing and edit the permissions on your shares so that the shares are password protected. You only need to do this if you don't want just anyone on your local network to be able to access your files. (Google it)

3. Install an SSH server on your host computer, I'd recommend freeSSHd. This will allow your to create a secure connection between your computers. I'd suggest freeSSHd because it's free and much easier to use than many of the alternatives (OpenSSH/Cygwin).

4. On the SSH tab in the freeSSHd settings, change the port to whatever port you want, I'll be using 12345 in my examples. I'd recommend something in between 10000 and 50000 so that a network scanner is less likely to pick up the port.

5. On the Users tab in freeSSHd, add a user with the username and password of your choice, set your password as "Password stored as SH1 hash".

6. On the Tunneling tab in freeSSHd, enable local and remote port forwarding.

7. Test your SSH server to make sure you can connect to it using a computer on the same network as the SSH server. You will need the local IP of the SSH server for this step you can find it using This guide.

To test it from your mac machine:

Open the Terminal (Applications/Utilities/Terminal)
Use the command ssh -p port username@hostip (Example: ssh -p 12345 lococobra@192.168.0.2)

8. Enable port-forwarding on your router to your SSH server at the port you used - Follow one of the guides for your router Here but use the port for SSH (12345)

9. (Optional) Set up an automatic DNS server for your host computer, you can set that up Here for free. I'd really suggest you do this, its very useful! Once you have that set up, install the No-IP Dynamic Update Client so that your DNS always matches your dynamic IP.

10. Test your SSH connection via the port forward. This is almost exactly the same as before, except instead of using the IP you got from ipconfig, use your global IP (or the DNS you set up in step 9). You can find your global IP Here.
Example: ssh -p 12345 lococobra@myDNS.hopto.org

Now that we have all that set up, we're almost done. What we're going to do is connect via SSH and forward the SMB ports from our host computer to our client. This will allow you to access your shares remotely. It works because your ssh/smb server will think that it's directly connected with your client computer, when in fact the connection is all handled through SSH. The tricky part is, OS X Leopard will not allow you to do this. If you forward the SMB ports from the server to client computer, then the client will think that it's connecting to itself, and so Leopard will deny the connect. In order to defeat this we're going to have to work some magic.

11. Set up an alias for your loopback connection (localhost/127.0.0.1) on your Mac. This will fool your computer into thinking it's connecting to an external IP. This command needs admin privileges, so you have to use sudo. The command is:

sudo ifconfig lo0 127.0.0.2 alias up

This will create a temporary alias for your loopback connection which will stay active until the computer is restarted.

12. Edit the all users configuration file for your SSH settings so that you can connect quickly without setting it up each time.

Open the Terminal and run sudo pico /etc/ssh_config
Enter the following text above the line that says " #Host *", change the user and port to the ones you have used in your SSH configuration.

Host AliasForHost
HostName hostip
Port 12345
User YourUserName
ServerAliveInterval 200
ServerAliveCountMax 3
LocalForward 127.0.0.2:139 127.0.0.1:139
LocalForward 127.0.0.2:445 127.0.0.1:445

Keep in mind that you can add any number of ports to this list. For example, if you want to connect to VNC, add 5900 to that list. Then to use VNC, connect to 127.0.0.2:5900.

Hit control + x, Y, and enter to save the file. Since we're saving it as a dotfile (there's a dot at the beginning) you won't be able to see it. If you need to edit it again, you can do it through pico the same way.

13. Initiate the SSH connection with your host computer using the host alias we set up before.

sudo ssh AliasForHost

14. Connect to the Samba share. Open a Finder window and hit command+ k to open a Connect to Server windows. For the server address, use:

smb://127.0.0.2

Now click Connect, and if everything went well you should be prompted with a window to enter your Login credentials for the server machine!

Wow, that was complicated, but at this point it doesn't need to be. Here's a little AppleScript I came up with to automate the connection. (Don't worry about running the ifconfig over and over, it won't hurt anything)

set Command to "sudo ifconfig lo0 127.0.0.2 alias up; sudo ssh AliasForHost"

tell application "Terminal"
if (count of windows) is 0 then
do script Command
else
do script Command in window 1
end if
activate
end tell

You can save that script as an application using the AppleScript Script Editor and run it to automatically run those commands.

I know for most people that post was probably really confusing but I tried! If you need help please comment or something. I'll get back to you.

Edit: Take a look at Fredrik's script in the first comment for an even more automated solution for connecting and mounting.

Edit2: I found a much more efficient way to actually initiate the connection using a host alias, take a look at the part about the ssh_config file

No Comments »

Must have Mac OSX Apps: RCDefaultApp

RCDefaultApp allows to set the default applications used for various URL schemes, file extensions, file types, MIME types, and Uniform Type Identifiers from within a very easy interface. You can manage all your default settings from a single point. A handy feature is the ability to be able to override the default application for new files. For example, if you save a PSD with photoshop but you for example always want to view PSD's with Xee, you will be able to configure this.

The application is freeware.
Go to the homepage of the author here:
http://www.rubicode.com/Software/RCDefaultApp/

No Comments »

Must have Mac OSX Apps: Xee

Xee is the ultimate replacement for the zero-feature image viewer that comes with your mac.

The features of xee are:

  • Display a large number of image formats - any format QuickTime or Preview
    can open, plus several more, including PCX, Maya IFF and Amiga IFF-ILBM.
  • Easy browse through folders of images - open any file in a
    folder and use the toolbar, keyboard shortcuts or mouse wheel to
    view the other images in the same folder.
  • Browse image inside archives, using the uncompression engine from
    The Unarchiver. It can read almost every format
    The Unarchiver can, which include Zip, Rar, 7-Zip, Lzh, ISO and
    StuffIt. It also supports the CBZ and CBR formats, which are just
    renamed Zip and Rar files, respectively.
  • Effortlessly copy, move, rename and delete of images while viewing.
  • Losslessy rotate and crop JPEG images. This lets you edit your
    digital photographs without losing quality by re-compressing them like
    most other editors do.
  • View more EXIF data for JPEG files than Preview, and also other kinds of
    metadata, like XMP or IPTC. It can even try to identify what program or
    camera created a JPEG file by analyzing its quantization tables.
  • Extract bitmap images from inside PDF and SWF files. Many PDF files contain
    scanned pages in bitmap form, and Xee can read these and show them as
    bitmap image, and even save them. The same goes for bitmap images inside
    SWF files.
  • View images in full-screen.

Get it here: http://wakaba.c3.cx/s/apps/xee

1 Comment »

Generate CSR for apache with mod_ssl

This post is just as a reminder so i can look this up when i need to.. But if it helps you that's great.

To generate a 2048 bits certificate request do this:

openssl genrsa -out www.whatever.nl.key 2048
openssl req -new -key www.whatever.nl.key -out www.whatever.nl.csr

In the vhost add this:

SSLCertificateFile /where/ever/www.whatever.nl.crt
SSLCertificateKeyFile /where/ever/www.whatever.nl.key

When a intermediate CA is needed, download it, and add this line:

SSLCACertificateFile /where/ever/intermediate.ca.crt

No Comments »

Must have Mac OSX App: TotalFinder

The Finder is the worst thing on the mac if you ask me, there are several missing features for example the abilty tho show folders before files, show hidden files, no creation of those irritating .DS_Store files etc.

TotalFinder, from BinaryAge, does everything i miss in the default mac finder. A few features i like the most are:

  • Tabbed browsing
  • Side-by-side mode, 2 finders in one window
  • Show hidden/system files
  • Folders on top

Go to the TotalFinder website

No Comments »

Textmate command: url-safe

Transforms each line in you text file to an url-safe line. I use this for example to transform product names to url-safe names which i can use in a webshop.

#!/usr/bin/env php
<?php
$stdin = file_get_contents("php://stdin");

$lines = split("\n", $stdin);
$newlines = array();
foreach($lines as $line) {
$line = strtolower($line);
$line = preg_replace("/\s+/","-",$line);
$line = preg_replace("/[^a-z0-9_\-]/","",$line);
$newlines[] = $line;

}
echo join("\n", $newlines);

?>

No Comments »

Textmate command: sort


#!/usr/bin/env php
<?php
$stdin = file_get_contents("php://stdin");
$lines = split("\n", $stdin);
sort($lines);
echo implode("\n", $lines);
?>

No Comments »

Textmate command: lowercase

#!/usr/bin/env php
<?php
$stdin = file_get_contents("php://stdin");
echo strtolower($stdin);
?>

No Comments »

The best editor on mac osx #textmate create your own commands using PHP

With the bundle editor it's possible to create your own commands. And the best thing ever is you can use PHP in your commands.

Now i can do virtually anything, advanced text conversions, even with database lookups!

Textmate PHP command

No Comments »

Next »