Because you are checking clients that have unknown IPs, you might need to install an agent on them to 'check in' to a master (SNMP/WMI) seem like the best solution. You can schedule jobs to query back to the master using the OS scheduler (cron, at, etc). For example, your php script on the master might accept parameters like so:
Schedule a curl or wget, etc using cygwin on windows to hit that URI. The collector script would keep all of this in a database and if X minutes goes by without a response from one of the computers, it could send you an email. You could write something like this in under an hour, but they sell software that does this too.
However, if you wanted to simply test outbound random services, here are some other solutions:
Is my website up? For example, a simple page that you can curl and check if the response was a 200 (OK), with the expected data. But you would also want to know what the response time was. Is it taking 200ms or 20s to give you the answer?
A simple database query on a php page could test the database service as well as a web page and the php service.
WMI/SNMP is one way to pull various tidbits of info about the operating system. For example, CPU usage, disk space, running processes, etc. Of the two SNMP might be easier to implement.
Also, ping is a slice in time. It tells you that this particular slice in time responded, but it doesn't tell you about everything between the pings. If you are windows, and all you want to see is if the OS/networking is up on a remote host, you could try one of these 2 utilities:
These give a picture of network health too. Linux has similar tools too, such as:
httping -h hostname.com
Which will send an http request to any port you desire.
Of course there is also the trusty telnet:
telnet yoursite.com 80
Be careful though too, often pings are blocked for security reasons, so it's possible that you won't get a response. Host firewalls could block the pings, too.