<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Uri;
/**
* File URI handler
*
* The 'file:...' scheme is loosely defined in RFC-1738
*/
class File extends Uri
{
protected static $validSchemes = array('file');
/**
* Check if the URI is a valid File URI
*
* This applies additional specific validation rules beyond the ones
* required by the generic URI syntax.
*
* @return bool
* @see Uri::isValid()
*/
public function isValid()
{
if ($this->query) {
return false;
}
return parent::isValid();
}
/**
* User Info part is not used in file URIs
*
* @see Uri::setUserInfo()
* @param string $userInfo
* @return File
*/
public function setUserInfo($userInfo)
{
return $this;
}
/**
* Fragment part is not used in file URIs
*
* @see Uri::setFragment()
* @param string $fragment
* @return File
*/
public function setFragment($fragment)
{
return $this;
}
/**
* Convert a UNIX file path to a valid file:// URL
*
* @param string $path
* @return File
*/
public static function fromUnixPath($path)
{
$url = new static('file:');
if (substr($path, 0, 1) == '/') {
$url->setHost('');
}
$url->setPath($path);
return $url;
}
/**
* Convert a Windows file path to a valid file:// URL
*
* @param string $path
* @return File
*/
public static function fromWindowsPath($path)
{
$url = new static('file:');
// Convert directory separators
$path = str_replace(array('/', '\\'), array('%2F', '/'), $path);
// Is this an absolute path?
if (preg_match('|^([a-zA-Z]:)?/|', $path)) {
$url->setHost('');
}
$url->setPath($path);
return $url;
}
}