本文整理汇总了PHP中Zend\Uri\Uri::factory方法的典型用法代码示例。如果您正苦于以下问题:PHP Uri::factory方法的具体用法?PHP Uri::factory怎么用?PHP Uri::factory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zend\Uri\Uri
的用法示例。
在下文中一共展示了Uri::factory方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: setServerUrl
/**
* Sets server url (scheme and host-related stuff without request URI)
*
* E.g. http://www.example.com
*
* @param string $serverUrl server URL to set (only
* scheme and host)
* @throws \Zend\URI\Exception if invalid server URL
* @return \Zend\View\Helper\Navigation\Sitemap fluent interface, returns
* self
*/
public function setServerUrl($serverUrl)
{
$uri = \Zend\Uri\Uri::factory($serverUrl);
$uri->setFragment('');
$uri->setPath('');
$uri->setQuery('');
if ($uri->valid()) {
$this->_serverUrl = $uri->getUri();
} else {
$e = new \Zend\URI\Exception(sprintf('Invalid server URL: "%s"', $serverUrl));
$e->setView($this->view);
throw $e;
}
return $this;
}
示例2: ping
/**
* Pingback
*
* @param string $source ページのPing送信用のアドレス
* @param string $target ページのPing待受用のアドレス
* @return int
*/
public function ping($source, $target)
{
// Zend\Uri\Uriオブジェクトを生成
$source_url = Uri::factory($source);
$target_url = Uri::factory($target);
// 無効なアドレス
if (!$target_url->isValid()) {
return self::RESPONSE_FAULT_TARGET_INVALID;
}
if (!$source_url->isValid()) {
return self::RESPONSE_FAULT_GENERIC;
}
if ($target_url->getHost() === $source_url->getHost()) {
// ターゲットとソースのホストが一緒
// TODO: 同じドメインのサイトの場合、同じサイトとみなされる
return self::RESPONSE_FAULT_SOURCE;
}
// 相手のサイトに接続
$source_client = new Client($source_url);
$source_response = $source_client->request(Client::GET);
// 接続できたかをチェック
if (!$source_response->isSuccessful()) {
return self::RESPONSE_FAULT_SOURCE;
}
// 相手のサイトの中身を取得
$source_body = $source_response->getBody();
// 中身を取得できない
if (!$source_body) {
return self::RESPONSE_FAULT_SOURCE;
}
if ($target_url->getHost() !== $source_url->getHost() && strpos($source_body, $source_url) === false) {
// ソース URI のデータにターゲット URI へのリンクが存在しないため、ソースとして使用できない。
return self::RESPONSE_FAULT_SOURCE_LINK;
}
// 相手サイトのタイトルを取得(XMLとして処理した方がいい?)
$source_titles = array();
preg_match('/<title>([^<]*?)</title>/is', $source_body, $source_titles);
// タイトルが存在しないUntitled
$source_title = empty($source_titles[1]) ? self::UNTITLED_TITLE : $source_titles[1];
// ターゲットのクエリを取得(自サイト)
$query = $target_url->getQuery();
if (empty($query)) {
// http://[host]/[pagename]の場合(スラッシュは再エンコード)
$r_page = str_replace('/', '%2F', $target_url->getPath());
// $url_suffixが含まれる場合、正規表現でそこを削除
//$page = empty($url_suffix) ? $r_page : preg_replace('/'.$url_suffix.'$/', '', $r_page);
$page = rawurldecode($r_page);
unset($r_page);
} else {
// ターゲットに=が含まれる場合はページではないので無効
if (strpbrk($query, '=')) {
return self::RESPONSE_FAULT_TARGET_INVALID;
}
$page = $query;
}
// ページ名からWikiを呼び出す
$wiki = Factory::Wiki($page);
if (!$wiki->isValied()) {
// 無効なページ名
return self::RESPONSE_FAULT_TARGET_INVALID;
}
if (!$wiki->isReadable()) {
// 読み込み不可なページ
return self::RESPONSE_FAULT_ACCESS_DENIED;
}
// PingBackファイルを読み込む
$pb = new PingBackFile($page);
$lines = $pb->get();
if (count($lines) !== 0) {
foreach ($lines as $line) {
list($time, $url, $title) = explode("\t", $line);
if ($url === $target_url) {
// すでに登録されている
return self::RESPONSE_FAULT_ALREADY_REGISTERED;
}
}
}
// 新しいデーターを登録
$lines[] = join("\t", array(UTIME, $source_url, $source_title));
// 保存
$pb->set($lines);
return self::RESPONSE_SUCCESS;
}