Back to Path class

Method find

public static mixed
find
(mixed $paths, mixed $file)
Searches the directory paths for a given file.
Parameters
  • mixed $paths An path string or array of path strings to search in
  • string $file The file name to look for.
Returns
  • mixed The full path and file name for the target file, or boolean false if the file is not found in any of the paths.
Since
  • 1.7.0
Class: Path
Project: Joomla

Method find - Source code

/**
 * Searches the directory paths for a given file.
 *
 * @param   mixed   $paths  An path string or array of path strings to search in
 * @param   string  $file   The file name to look for.
 *
 * @return  mixed   The full path and file name for the target file, or boolean false if the file is not found in any of the paths.
 *
 * @since   1.7.0
 */
public static function find($paths, $file)
{
    // Force to array
    if (!\is_array($paths) && !$paths instanceof \Iterator) {
        settype($paths, 'array');
    }
    // Start looping through the path set
    foreach ($paths as $path) {
        // Get the path to the file
        $fullname = $path . '/' . $file;
        // Is the path based on a stream?
        if (strpos($path, '://') === false) {
            // Not a stream, so do a realpath() to avoid directory
            // traversal attempts on the local file system.
            // Needed for substr() later
            $path = realpath($path);
            $fullname = realpath($fullname);
        }
        /*
         * The substr() check added to make sure that the realpath()
         * results in a directory registered so that
         * non-registered directories are not accessible via directory
         * traversal attempts.
         */
        if (file_exists($fullname) && substr($fullname, 0, \strlen($path)) === $path) {
            return $fullname;
        }
    }
    // Could not find the file in the set of paths
    return false;
}