php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #52072 RFE: can we have `which`
Submitted: 2010-06-13 02:34 UTC Modified: 2010-06-13 03:12 UTC
Votes:2
Avg. Score:2.5 ± 0.5
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: php at richardneill dot org Assigned:
Status: Wont fix Package: Filesystem function related
PHP Version: Irrelevant OS: Linux
Private report: No CVE-ID: None
 [2010-06-13 02:34 UTC] php at richardneill dot org
Description:
------------
It would be nice if PHP had a builtin "which" command.

For example,  which("ffmpeg")  would allow the user to check whether ffmpeg 
was installed, prior to calling it with exec().

Test script:
---------------
which("ffmpeg") should return eg:
 /usr/bin/ffmpeg
if the command exists, and is in the £PATH for exec(), or
 false
if it doesn't exist.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-06-13 02:47 UTC] rasmus@php.net
-Status: Open +Status: Wont fix
 [2010-06-13 02:47 UTC] rasmus@php.net
This seems trivial to do in userspace to me:

function which($cmd) {
	$paths = explode(':',$_ENV['PATH']);
	foreach($paths as $path) {
		$p = $path.'/'.$cmd;
		if(file_exists($p)) return $p;
	}
	return false;
}
 [2010-06-13 03:06 UTC] php at richardneill dot org
Thanks for your quick reply. I agree - it's trivial to do in userspace. 

The simplest way is just to 
 $lastline = exec ("which $ffmpeg", $output, $retval)
 if (retval){
   return ($lastline)
 }else{
   return ($false)
 } 


Indeed many of the PHP functions are trivial in that sense - one could build file_get_contents() out of fopen(),file(),fclose(), or could avoid using unlink by a call to system("rm filename").

However the attraction of PHP is that so many of the required functions already exist and I don't have to write them. So I think that which() would be a useful addition. 

I'm particularly thinking of the cases where php-cli is an improvement on shell-scripting.
 [2010-06-13 03:12 UTC] rasmus@php.net
Using exec is definitely not the best way to do that one.  Anytime you fork+exec a 
new process you take on a significant performance penalty.  Same goes for your 
system() example.  But, if you can do it in a couple of lines without resorting to 
an exec(), then it is indeed trivial.  file_get_contents() is slightly more 
complicated because of the streams support in it.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 12:01:31 2024 UTC