Category Archives: Web

CSS pseudo-element first-letter using form label element

Today I spent 1/2 hour trying to understand, why my labels do not respect CSS rule first-letter. Here is an example snippet:
#myform label:first-letter {text-decoration:underline}

<form id="myform" action="/test/" method="post">
<label title="From">From:</label>

The problem was, that The ‘first-letter’ pseudo-element can only be attached to a block-level element.

Reference: w3 – 2.4 The ‘first-letter’ pseudo-element

Also, space is mandatory after ‘first-letter’ in CSS, so that this rule are displayed correctly in older browsers, such as Internet Explorer 6.

Make asynchronous call in PHP using PHP socket and custom User agent string

Recently I wrote about async calls in PHP. In the provided example from w-shadow.com there is one thing missing – User agent string.

Changing User agent string to something unique is handy, when analyzing log file. You can see, if someone is messing with your hidden asynchronous PHP script.

Here is an example, that uses PHP socket to make async call:

function backgroundPost($url){
  $parts=parse_url($url);
 
  $fp = fsockopen($parts[‘host’],
          isset($parts[‘port’])?$parts[‘port’]:80,
          $errno, $errstr, 30);
 
  if (!$fp) {
      return false;
  } else {
      $out = "POST ".$parts[‘path’]." HTTP/1.1\r\n";
      $out.= "Host: ".$parts[‘host’]."\r\n";
      $out.= "User-Agent: WishMesh.com custom user agent. Not Gecko!\r\n";
      $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
      $out.= "Content-Length: ".strlen($parts[‘query’])."\r\n";
      $out.= "Connection: Close\r\n\r\n";
      if (isset($parts[‘query’])) $out.= $parts[‘query’];
 
      fwrite($fp, $out);
      fclose($fp);
      return true;
  }
}
 
//Example of use
backgroundPost(‘http://example.com/slow_async_script.php?id=’.
                urlencode(‘file.txt’));

Don’t forget to change “User-Agent” to something more meaningful for you.

The function backgroundPost opens TCP/IP connection to specified $url and makes HTTP POST. Right after data is submitted to the server, we close connection using fclose function, but the background script keeps running. If the background script is on the same server, we have two PHP scripts running simultaneously.

As suggested in the w-shadow.com I use ignore_user_abort(true); in the slow_async_script.php, so that PHP or Apache keep my script running even after we have aborted connection to it (using socket close command fclose).