Install PHP as FastCGI on XP

1. Do not use the web platform installer. If you already have, uninstall PHP and FastCGI using the Control Panel
2. Download the Non Thread Safe ZIP version from, unpack it in C:\PHP5
3. Download FastCGI from (already included in Windows 7)
4. Add the .php file extension mapping using the IIS manager or
C:\WINDOWS\system32\inetsrv>cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"C:\PHP5\php-cgi.exe"
5. Download the VC9 non-thread safe FreeTDS dll from … or (preferred – this one has parameterized queries) the v2 php_sqlsrv_53_nts_vc9.dll – search for the download link on – it’s in beta now.
6. In c:\php5\php.ini:
error_log = c:\devel\php-errors.log
fastcgi.impersonate = 1
7. Set the application protection level to Low (IIS Process)
8. in a file.php
$serverName = "(local)\sqlexpress";
$connectionOptions = array("Database"=>"aa", "UID"=>"zz", "PWD"=>"yy");
$conn = sqlsrv_connect($serverName, $connectionOptions); $s=sqlsrv_errors();
if(!$conn) echo ('cannot connect: ' .$s[0][2]);
else { echo 'Successful connection';
sqlsrv_close($conn); }

Prevent Finder error -36 when copying on SMB share

The error is caused by OS X trying to save metadata for copied files in resource forks (NT terminology) / named streams (Mac terminology). If the server (usually Samba) doesn’t support this it can be disabled
1. For a Mac user, when connecting to any SMB server, write
in ~/Library/Preferences/nsmb.conf

2. For all Mac users, when connecting to a specific share
touch "/shared dir/"
while there, you should also do a
touch "/shared dir/.metadata_never_index"
3. Samba can also disable the forks and extended attributes for all clients, use
ea support = no
unix extensions = no
in /etc/smb.conf

Schedule a background task in ASP.Net

private static CacheItemRemovedCallback OnCacheRemove = null;
protected void Application_Start(object sender, EventArgs e)
AddTask("DoStuff", 60);
private void AddTask(string name, int seconds)
OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
HttpRuntime.Cache.Insert(name, seconds, null,
DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable, OnCacheRemove);
public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
// do stuff here if it matches our taskname, like WebRequest
// re-add our task so it recurs
AddTask(k, Convert.ToInt32(v));

Grant restricted backup and restore privileges

Purpose: allow a specific user to backup and restore database, without giving her full access to the filesystem.
As dbo, create the proc below, create the login, grant public access to master, grant dbo access on the needed databases, grant execute on dbo.backupng and dbo.restoreng to sqluser.
As user,
exec backupng @database='somename'
Continue reading "Grant restricted backup and restore privileges"

How to create / consume a .Net web service

[WebService(Namespace = "http://server")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class myservice : WebService {
public string someq(string var1, string var2)
return var1+var2;

$wsdl = "http://server/service.asmx?wsdl";
$client = new SoapClient($wsdl);
var_dump($client->someq(array('var1'=>"val1", 'var2'=>"val2")));

Bad Behavior has blocked 122 access attempts in the last 7 days.