php curl登录cookie值存取示例
先准备两?小程式, 做确认程式是否有抓到 COOKIE 值.
login.php (POST 到 login.php, login.php 会确认帐号/密码, 然后写 COOKIE值)
代码如下 | 复制代码 |
<?php if ($_POST['username'] == 'admin' && $_POST['password'] == '1234') { setcookie('u', 'admin'); header('Location: check_login.php'); } else { echo 'failed'; } ?> |
check_login.php (确认是否有 $_COOKIE['u'] 的值, 而且是否是 'admin', 来判断是否已 Login)
代码如下 | 复制代码 |
|
假设上述两个档案分别在 http://localhost/login.php / http://localhost/check_login.php, 所以就来写下述程式, 送 POST 到 login.php, 再经由 check_login.php 做确认是否登入完成, 程式如下:
例
代码如下 | 复制代码 |
<?php // 取得目? Url ?定的 cookie, ??入 cookie.txt (使用 POST) $resource = curl_init(); return $resource; // 取得此 Url 的?热?br />
function getUrlContent($resource, $url) return $content;
// get contents (need cookie check) |
Function List
■resource setUrlCookie($url, $postdata)
■string getUrlContent($resource, $url)
使用方法
■getUrlContent(setUrlCookie($login_url, $postdata), $login_check_url);
setUrlCookie() 是 POST 送到 Login.php, 然后将 COOKIE 写入 cookie.txt(或者可以用 tempnam() 产生一个唯一名字的档案来储存). 再用 getUrlContent() 去通过 COOKIE 验证, 以取得网页的资料.
照理说应该将上述 function 写成一个 Class, 能方便管理 curl_init() 的 resource, 不过, 先暂时写成 function, 应该较容易理解~
再看一个实例
代码如下 | 复制代码 |
<?php |
面介绍使用Linux中的Crontab来实现的两种方法。关于crontab的使用,可参考文章:Linux计划任务crontab详解
一、在Crontab中使用PHP执行脚本
就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。
每一小时执行myscript.php如下:
代码如下 | 复制代码 |
#crontab -e |
php为PHP程序的路径。
二、在Crontab中使用URL执行脚本
如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。
代码如下 | 复制代码 |
00 * * * * lynx -dump http://abc.cn/script.php |
下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。
代码如下 | 复制代码 |
*/5 * * * * /usr/bin/curl -o temp.txt http://abc.cn/script.php |
下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。
代码如下 | 复制代码 |
*/10 * * * * /usr/bin/wget -q -O temp.txt http://abc.cn/script.php |
再介绍一下在Windows下php计划任务的实现
1、新建一个abc.php,内容如下:
代码如下 | 复制代码 |
<? |
2、新建abc.bat文件,内容如下:
代码如下 | 复制代码 |
C:/php/php.exe -q D:/web/abc.php |
3、建立WINDOWS计划任务:
开始–>控制面板–>任务计划–>添加任务计划
浏览文件夹选择上面的abc.bat文件
设置时间和密码(登陆WINDOWS的保存即可了。
4、右键点击计划任务 -> “运行”即可
再介绍一个使用php程序来实现的计划任务
这种效率并不高,也不稳定,使用 crontab 才是王道。
代码如下 | 复制代码 |
<?php do { |
首先运行该页面,然后关闭该页面,程序仍然运行中,每隔30秒程序会填补信息到abc.txt文件中去。
在php中如果读取普通的小文件方法很简单,但如果我们要利用php读取大文件可能需要一些小技巧了,下面我来总结一下php读取大文件实例在php开发中,经常遇到要读取一些文件,最简便的方法莫过于使用一些如file、file_get_contents之类的函数,简简单单的几行代码就能轻松的搞定。但当需要操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法。
需求:有一个800M的日志文件,大约有500多万行,用php返回最后几行的内容。
实现方法有以下:
1. 直接采用 file函数 来操作
注:由于 file函数是一次性将所有内容读入内存,而php为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M来进行设置,这个值如果设置-1,则内存使用量不受限制.
下面是一段用file来取出这具文件最后一行的代码.
代码如下 | 复制代码 |
ini_set('memory_limit', '-1'); |
整个代码执行完成耗时 116.9613 (s).
我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万 不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了.
2.直接调用linux的 tail命令 来显示最后几行
在linux命令行下,可以直接使用tail -n 10 access.log很轻易的显示日志文件最后几行,可以直接用php来调用tail命令,执行php代码如下.
代码如下 | 复制代码 |
file = 'access.log'; |
整个代码执行完成耗时 0.0034 (s)
3. 直接使用 php的fseek 来进行文件操作
这种方式是最为普遍的方式,它不需要将文件的内容全部读入内容,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作 时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法.
方法一:
首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置, 再取这一行的位置,依次类推,直到找到了$num行。
实现代码如下:
代码如下 | 复制代码 |
$fp = fopen($file, "r"); 整个代码执行完成耗时 0.0095 (s) |
方法二:
还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换 行符(n)的个数来判断是否已经读完最后$num行数据.
实现代码如下:
代码如下 | 复制代码 |
$fp = fopen($file, "r"); if (substr_count($readData, "n") >= $num + 1) { |
整个代码执行完成耗时 0.0009(s).
方法三:
代码如下 | 复制代码 |
function tail($fp,$n,$base=5) { |
整个代码执行完成耗时 0.0003(s)
在php 中curl_init可以做很多远程采集或模仿用户登录的一些实例,下面小编来给各位同学介绍php中的curl_init使用方法首先,我们要知道curl_init在php安装是是不可以使用的,我们必须开户它才可以
在C/windows里的php.ini中我打开了extension=php_curl.dll的功能,然后也重启了apapche
你看看PHP的phpinfo()中有没有CURL扩展支持!
把php_curl.dll拷到c:/windows/和c:/windows/system32里面 重启apache
PHP中的CURL函数库(Client URL Library Function)
curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be “selected”
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
curl_version — 获取curl相关的版本信息
curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。
例子一: 基本例子
基本例子
代码如下 | 复制代码 |
??php // 设置你需要抓取的URL // 设置header // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 // 运行cURL,请求网页 // 关闭URL请求 // 显示获得的数据 ?> |
例子二: POST数据
sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。
POST数据
代码如下 | 复制代码 |
??php $phoneNumber = ’13812345678′; $message = ’This message was generated by curl and php’; $curlPost = ’pNUMBER=’ . urlencode($phoneNumber) . ’&MESSAGE=’ . urlencode($message) . ’&SUBMIT=Send’; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ’http://www.111cn.net/sendSMS.php’); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec(); curl_close($ch); ?? |
例子三:使用代理服务器
使用代理服务器
代码如下 | 复制代码 |
??php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ’http://www.cmx8.cn’); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($ch, CURLOPT_PROXY, ’proxy.111cn.net:1080′); curl_setopt($ch, CURLOPT_PROXYUSERPWD, ’user:password’); $data = curl_exec(); curl_close($ch); ?? |
例子四: 模拟登录
Curl 模拟登录 discuz 程序,适合DZ7.0,将username改成你的用户名,userpass改成你的密码就可以了.
Curl 模拟登录 discuz 程序
<?php
代码如下 | 复制代码 |
|
我现在用的是 模拟ie6 的:
代码如下 | 复制代码 |
function crawl_dou_request($url,$timeout=1){//php 模拟get |
1、获取文件名:basename();
2、获取文件所在的目录:dirname();
3、pathinfo()获取文件信息,返回结果为一个array,包括路径、文件全名、文件名和扩展名。例如:
代码如下 | 复制代码 |
$file = '/com/netingcn/error.log'; 结果为: Array( |
4、判断文件是否存在:is_file();
5、判断目录是否存在:is_dir();
6、判断文件或目录是否存在:file_exists();
7、读取文件所有内容:file()或file_get_contents(),其中file()返回的是一个一行为元素的array,file_get_contents()把文件全部内容作为一个String返回;
8、写文件fwrite,如:
代码如下 | 复制代码 |
$handler = fopen($file, 'w'); // w 会冲掉以前的内容、a 是追加 $handler = fopen($file, 'r'); while(!feof($handler)) { while(!feof($handler)) { while(!feof($handler)) { $content = fread($handler, $strLength); //读取指定长读的字符 fclose($handler); |
PHP 读文件内容,此文件为txt,路径$filePath为'list.txt', 即放在和php文件同一个目录,
注意:
本人的txt的内容样式如下:
Email,FirstName,LastName...
neil@ddd.com,neil,zhou...
...
具体实现根据自身情况修改。
代码如下 | 复制代码 |
$fp = fopen($filePath,"r ");
/**
|
PHP 写内容到txt文件中
代码如下 | 复制代码 |
$handle = fopen($filePath, "w "); |
怎么样,是不是看起来很简单呢?下面是一些简单知识的总结:
fopen()
fopen() 函数用于在 PHP 中打开文件,此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件.
模式 描述
r 只读。在文件的开头开始。
r+ 读/写。在文件的开头开始。
w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
a 追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。
a+ 读/追加。通过向文件末端写内容,来保持文件内容。
x 只写。创建新文件。如果文件以存在,则返回 FALSE。
x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
注释:如果 fopen() 无法打开指定文件,则返回 0 (false)。
feof()
检测 End-of-file
feof() 函数检测是否已达到文件的末端 (EOF),在循环遍历未知长度的数据时,feof() 函数很有用。注释:在 w 、a 以及 x 模式,您无法读取打开的文件!
if (feof($file)) echo "End of file";
fgets()
fgets() 函数用于从文件中逐行读取文件。在调用该函数之后,文件指针会移动到下一行。
相关文章
- PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
- 在很多网站用户先访问一个要登录的页面,但当时没有登录后来登录了,等待用户登录成功之后肯定希望返回到上次访问的页面,下面我就来给大家介绍登录后跳转回原来要访问的页...2016-11-25
- 本文章完美的利用了php的curl功能实现模拟登录discuz以及模拟发帖,本教程供参考学习哦。 代码如下 复制代码 <?php $discuz_url = ‘ht...2016-11-25
- 本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法。分享给大家供大家参考,具体如下:这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起...2015-11-08
Ruby on Rails实现最基本的用户注册和登录功能的教程
这里我们主要以has_secure_password的用户密码验证功能为中心,来讲解Ruby on Rails实现最基本的用户注册和登录功能的教程,需要的朋友可以参考下...2020-06-30- 什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
- 【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
- 什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
- 这篇文章主要为大家详细介绍了vue实现用户登录切换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-22
- 这篇文章主要介绍了vue项目中js-cookie的使用存储token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-14
- 出现phpmyadmin不能登录是我在修改我mysql服务器密码之后导致的,后来百度了相关的原因,原来是修改了mysql密码之后我们还需要在phpmyadmin目录中去修改config.inc.php中...2016-11-25
Vue-Element-Admin集成自己的接口实现登录跳转
关于这个Vue-element-admin中的流程可能对于新的同学不是很友好,所以本文将结合实例代码,介绍Vue-Element-Admin集成自己的接口实现登录跳转,感兴趣的小伙伴们可以参考一下...2021-06-23- 什么是cookie? cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。 有关cookie的例子: 名字 cookie 当访...2014-05-31
- 这篇文章主要介绍了浅谈js二维码扫码登录是什么原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
python爬虫用request库处理cookie的实例讲解
在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21- 昨天有一朋友说自己的phpmyadmin不能登录并且无任何提示了,问我怎么解决,下面我来分享一下关于phpmyadmin不能登录问题总结. phpmyadmin不能登录没有提示 解决方法:...2016-11-25
- session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
- cookie 的用途之一是存储用户在特定网站上的密码和 id。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求阁下的网络浏览器利用阁下计算机硬驱上的少量...2016-11-25
- 这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
- 本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下...2020-06-25