如果你想从 URL 中移除 page=0、page=负数 或任何指定的 page 参数,可以使用 preg_replace() 进行正则匹配和替换。以下是几种情况的解决方案:
1. 移除 page=0 或 page=负数
如果 $cPage 是当前页码(可能是 0 或负数),并且你想从 URL 中移除 page=xxx(其中 xxx 是 0 或负数),可以使用:
$url = "index.php?page=0&foo=bar";
$cPage = 0; // 或 -1, -2 等
// 匹配 page=0 或 page=负数,并移除
$newUrl = preg_replace('/([&?])page=-?d+(&|$)/', '$1', $url);
// 处理可能的残留 ? 或 &
$newU...
使用curl_multi_exec并发请求外部接口
有时候在一个PHP方法中要多次调用外部的接口,为了优化代码,提高效率,我们不妨使用curl_multi_exec并发处理多个请求,这样可以明显地提高获取响应数据的速度,减少程序执行的时间,下面是一个实际运行的例子。
<?php
/**
* 使用curl并行发送多个请求获取数据
* @param array $urls 多个请求数组
* @return array
*/
function sendMultiRequest(array $urls)
{
$conn = [];
$res = [];
//创建批处理curl句柄
$mh = curl_multi_init();
foreach ($urls as $k => $item) {
$conn[$k] = curl_init(); //初始化各个子连接
//...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://xxxxx.xxx');//使用一个不存在的地址
curl_exec($ch);
此时会返回一个错误码:curl_errno($ch)
对应的使用$errlist[curl_errno($ch)]就能返回中文的错误说明
$errlist = array(
'1'=>'CURLE_UNSUPPORTED_PROTOCOL (1) – 您传送给 libcurl 的网址使用了此 libcurl 不支持的协议。 可能是您没有使用的编译时选项造成了这种情况(可能是协议字符串拼写有误,或没有指定协议 libcurl 代码)。',
'2'=>'CURLE_FAILED_INIT (2) – 非常早期的初始化代码失败。 可能是内部错误或问题。',
'3'=>'CURLE...
批量下载文件一般使用循环的方式,逐一执行下载。但在带宽与服务器性能允许的情况下,使用多进程进行下载可以大大提高下载的效率。本文介绍php利用curl的多进程请求方法,实现多进程同时下载文件。
原理:使用curl的批处理方法,开启多进程,实现批量下载文件。
主要方法:
curl_multi_init
返回一个新cURL批处理句柄
curl_multi_add_handle
向curl批处理会话中添加单独的curl句柄
curl_multi_exec
运行当前 cURL 句柄的子连接
curl_multi_getcontent
如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
curl_multi_remove_handle
移除curl批处理句柄资源中的某个句柄资源
cu...
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否将响应结果存入变量,1是存入,0是直接echo
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);//在发起连接前等待的时间,如果设置为0,则无限等待。
curl_setopt($ch, CURLOPT_TIMEOUT, 15);//允许执行的最长秒数。
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);//伪造浏览器头信息
curl_setopt($ch, CURLOPT_REFERER,$_REFERER);//伪造来源页面
curl_setopt($ch, CURLOPT_URL, $url);
$htmlSource = curl_exec($ch);
//$h...
在xml应用中,经常将一些URL信息作为xml数据存储,其中URL参数有可能包含有中文字符。当使用dom对xml数据进行解析时,可以对中文字符进行编码。但如果只使用xslt来显示xml数据时(data.xml+data.xsl),发现此时的URL会出现编码错误.即使指定编码类型(encoding="gb2312"),依然会出现同样的问题.测试发现:是IE的缓存机制问题,IE仍会把新的页面(所链接的URL)的MIME内容类型默认为text/xml解决方法:1.指定输出文档类型为xml文档 (example:data.xsl)<xsl:output method="xml" encoding="gb2312" media-type="text/xml" />2.在新的窗口打开,给联接增加属性,指明目标窗口为其他窗...
用javascript对URL进行编码时有3个函数可选:escape,encodeURI,encodeURIComponent函数.下面介绍一下它们的用法和区别。
1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:
<script language="javascript">document.write(''<a href="http://www.phpzixue.cn/?logout&aid=7&u=''+encodeURIComponent("http://www.phpzixue.cn/")+''">退出</a>'');</script>
2、 进行url跳转时可以整体使用encodeURI
例如: Location.href=encodeURI(http://cang.baidu.com/do/s?word=中国asp之家&ct=21);
3、...
这个正则的关键就在于匹配链接,匹配之后,在两边加上a标签和属性不是问题。
/http://[w-]*(.[w-]*)+/ig首先匹配http://。 [w-]*是可能的www和bbs等。 .[w-]*匹配.xxx形式,至少有一个。以下是代码: <script type="text/javascript">
/******************************************************
* Share JavaScript (http://www.ShareJS.com)
* 使用此脚本程序,请保留此声明
* 获取此脚本以及更多的JavaScript程序,请访问 http://www.ShareJS.com
******************************************************/
function replaceReg(reg,str){
return str.replace(reg,function(m){return '<a href="'+...
在 asp.net 里实现 URL重写(URLRewriter)的一个最简单的方法。
参考了 (作者 Scott Mitchell 翻译:Janssen )的大作,虽然没有完全看明白,但是也照猫画虎地做了一个,颇有“成就”感。写出来分享一下。
原作里讲了很多的原理,这里就不说了(其实我也不懂)。这里就写操作过程吧。目的是实现一个最简单的能实现 URL重写 的程序。
1、需要设置一下IIS里的站点属性。
2、修改web.config的内容。
<system.web> <httpHandlers> <add verb="*" path="*.zhtml" type="ZDIL.URLRewriter.RewriterFactoryHandler, ...
取得地址栏内URL及文件所属的路径:
运用$_SERVER[ ]我们可以来完成许多事情:它是一个包含头部(headers),路径信息及脚本位置的数组,数组的实体由web服务器创建。
这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中您不需要使用global $_SERVER; 访问它,就如同使用 $HTTP_SERVER_VARS 一样。 $HTTP_SERVER_VARS 包含着同样的信息,但是不是一个自动全局变量。(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)如果设置了 register_globals 指令,这些变量也在所...
在实际的应用中,经常会遇到一些特殊的情况,比如需要新闻,天气预报,等等,但是作为个人站点或者实力小的站点 我们不可能有那么多的人力 物力 财力去做这些事情,怎么办呢?
好在互联网是 资源共享的,我们可以利用程序 自动的把别的站点的页面抓取回来经过处理后被我们所利用。
用什么呢,那个战友给的是不行的,其实在Php有这个功能,那就是用curl库。请看下面的代码!
<?php
$ch = curl_init ("http://dailynews.sina.com.cn");
$fp = fopen ("php_homepage.txt", "w");
curl_setopt ($ch, CURLOPT_FILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec...
从朋友那拿到一份代码,用CURL模拟用户登录并采集需要用户登录的页面的。
先在本机测试,在php.ini中去掉了extension=php_curl.dll前面的;,查看一下phpinfo(),并没有curl。
查了下文档:将libeay32.dll 和ssleay32.dll复制到system32下,重启apache,刷新phpinfo(),看到了curl。
以下是PHP代码:【复制代码】 <?php
$cookie_jar = tempnam('./tmp','cookie');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'登陆地址');
curl_setopt($ch, CURLOPT_POST, 1);
$request = 'username=xxx&pwd=xxx';
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);//传递数据
curl_set...
bool curl_setopt (int ch, string option, mixed value)
curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。
下列选项的值将被作为长整形使用(在option参数中指定):
*CURLOPT_INFILESIZE: 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。
*CURLOPT_VERBOSE: 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。
*CURLOPT_HEADER: 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
*CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一...
PHP常常因为它可能允许URLS被导入和执行语句被人们指责。事实上,这件事情并不是很让人感到惊奇,因为这是导致称为Remote URL Include vulnerabilities的php应用程序漏洞的最重要的原因之一。 因为这个原因,许多安全研究人员建议在php.ini配置中禁用指向allow_url_fopen。不幸的是,许多推荐这种方法的人,并没有意识到,这样会破坏很多的应用并且并不能保证100%的解决remote URL includes以及他带来的不安全性。 通常,用户要求在他们使用其他的文件系统函数的时候,php允许禁止URL包含和请求声明支持。 因为这个原因,计划在PHP6中提供allow_url_include。在这些讨论之后,这些特性在php5.2.0 中被backported。现在大多数...
* Exact match (/foo)绝对匹配 * Path match (/foo/*)部分匹配 * Extension match (*.foo)后缀匹配 * Default servlet (/) which is useful only for servlet mappings There is no legal syntax to say "all but this set of paths". url-pattern写成/foo/或者 /*.jsp或者*/foo等等都是无效的url-pattern
<%@page import="java.net.*,java.io.*"%> <%! public boolean saveUrlAs(String photoUrl, String fileName) { //此方法只能用户HTTP协议 try { URL url = new URL(photoUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); DataInputStream in = new DataInputStream(connection.getInputStream()); DataOutputStream out = new DataOutputStream(new FileOutputStream(fileName)); byte[] buffer = new byte[4096]; int count = 0; while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); } out.close(); in.close(); ret...