男朋友发911什么意思过来的图片下方有weixinfile什么意思

请问 在微信收到朋友刚发来的相片,但相片下面显示weixinfile这样是不是代表着相片是旧相片吗_百度知道
请问 在微信收到朋友刚发来的相片,但相片下面显示weixinfile这样是不是代表着相片是旧相片吗
谢谢您 帮忙
我有更好的答案
请问搞清楚了吗?我也遇到一个这样的问题
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。朋友发过来的图片下方有weixinfile什么意思_百度知道
朋友发过来的图片下方有weixinfile什么意思
朋友发过来的图片下方有weixinfile什么意思有哪位知道的请告知谢谢
我有更好的答案
朋友发过来的图片下方有weixinfile,意思是来自于,微信文件。保存在微信相关的文件夹里的。
微信文件夹
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。自适应热点,点击即读&,左右滑动翻页
过往报纸查询&
图文页面,带图说,左右滑动上一篇下一篇
header(&content-type:text/ charset=utf-8&);//指编码&function ajax_x($actreply,$replyid,$rows,$pseq,$page)& //异步执行函数&{&&& $url = 'http://域?ac=reply&reply='.$& //POST指向的链接&&&&& &&& $data = array(&&&&& &&&&&&&&&&&&&&&&&&& 'actreply'=&$actreply,&&&&&&&&&&&&&&&&&&& 'replyid'=&$replyid,&&&&&&&&&&&&&&&&&&& 'rows'=&$rows,&&&&&&&&&&&&&&&&&&& 'pseq'=&$pseq,&&&&&&&&&&&&&&&&&&& 'page'=&$page&&&& &&& );&&& $json_data = postData($url, $data);&&&&& &return $json_&} &&& function postData($url, $data)&&&&& &&& {&&&&& &&&&&&& $ch = curl_init();& &&&&&&& //$timeout = 1;&&&&&& &&&&&&& curl_setopt($ch, CURLOPT_URL, $url);&&&& &&&&&&& curl_setopt($ch, CURLOPT_REFERER, &http://域/&);&& //构造来路&&& &&&&&&& curl_setopt($ch, CURLOPT_POST, true);&&&&& &&&&&&& curl_setopt($ch, CURLOPT_POSTFIELDS, $data);&&&&& &&&&&&& curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&&&&& &&&&&&& //curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);&&&&& &&&&&&& $handles = curl_exec($ch);&&&&& &&&&&&& curl_close($ch);&&&&& &&&&&&& return $&&&&& &&& } &$ac&&&= $_GET['ac'];&$actreply&= $_POST['actreply'];&$replyid&= $_POST['replyid'];&$rows&&= $_POST['rows'];&$pseq&&= $_POST['pseq'];&$page&& =$_POST['page'];&if ($ac == 'reply'){&$array = ajax_x($actreply,$replyid,$rows,$pseq,$page);&&&&& &echo& $&&& //var_dump ($array);//调试输出方式1&& //echo '&pre&';print_r($array); //调试输出方式2
摄影如何做到白加黑减
  最佳曝光并不是相机提供的正确曝光。所以我们需要根据照相机提供的自动测光数据进行相应的曝光调整,这种调整叫做曝光补偿。“白加黑减”就是曝光补偿时至关重要的曝光调整口诀。
说说测光  几乎所有的照相机采用的测光方式都是反射式测光,所测量的是被摄体反射的光线。照相机所测量的数值是以景物局部反射光的18%灰为参考,这是因为18%灰可以将我们眼中的绝大部分景物都能够展现出来,照相机依此作为曝光依据,可以使绝大部分景物获得基本正确的曝光效果。所以我们不难发现,只要将相机设定在自动曝光挡上,我们就能获得基本正确的曝光。
  不过我们身边的景物也不见得都接近18%灰,我们对不同景物的明暗表现也有不同的要求,所以照相机自动测光下所提供的正确曝光也不见得是最合适的曝光。那么什么才是合适的曝光呢?许多成功的摄影师都有一个控制曝光的口诀叫做“白加黑减”。
自动测光是参考
  尽管照相机的研发者们不断地对测光技术进行改良,照相机的测光模式也越来越多,不同品牌的相机有着不同的测光计算方法,目的就是让人们能够更加轻易地拍摄到曝光准确的照片。但是现实中的景象千变万化,再智能的测光技术和曝光方式都有可能被现实情景所蒙蔽。所以对于有着丰富经验的摄影人而言,照相机的测光模式有一种足矣,因为自动测光只是参考,不是曝光的唯一选择。
Tips:测光模式的测光峰值图
  测光的计算方法虽然非常多,但具体应用在一部照相机上时,最多不过三四种。最常见的是多区域评价测光(智能测光)、中央重点测光、点测光等。上图为三种常见测光模式的测光峰值图。
  单纯按照相机的测光数据拍摄有时会出现一定的偏差,也就是说对着白色物体或黑色物体测光所得到的都是按照18%灰的数据。比如拍摄雪景时,按照相机的自动测光和自动曝光来拍摄,所得到的照片一般都会出现曝光不足的现象,本应是白色的景物往往会偏灰;同样,拍摄黑色或深色物体时,自动曝光所获取的照片同样会使黑色偏灰,这样的照片效果不够真实,也自然不能令人满意。所以,曝光补偿的作用极为重要。
  我们常见的具有自动曝光功能的相机一般都有曝光补偿功能,在相机上的识别符号是“+/-”。在自动曝光模式下,可以按照1/2EV、1/3EV,甚至更小的幅度来进行曝光量的增减。“白加黑减”的基础用法,就是拍摄白色或浅色物体时,增加曝光补偿,比如拍摄白色的物体时,增加1-1.5EV的曝光补偿,便能够显示出基本正确的白色;拍摄黑色物体时,减少1-1.5EV的曝光补偿,黑色物体也不会再发灰,基本贴近我们眼睛看到的颜色。当然,不同的物体反光率也不同,曝光补偿的增减幅度也不会完全一致,好在现在的数码相机具有立拍立现的功能,可以参照相机LCD的显示效果进行合适的补偿。
理解“白加”
  从字面上理解,“白加黑减”中的“白加”是拍摄白色或浅色调的景物应增加曝光量之意。比如拍摄白色的瓷器、雪景时,如果按照相机给予的自动测光来曝光,景物必然偏灰,白色或浅色的真实色彩无法得到正确表现,在照相机自动测光的基础上,增加0.5-1.5EV的曝光量后,浅色及白色才能够得以正确体现。
  不过“白加”并不见得只适合拍摄白色或浅色物体,在摄影创作中,有许多时候需要增加曝光量。比如拍摄一些花卉及人像作品时,增加曝光量不仅可以使主体看起来更加洁净柔和,还可以让浅色背景曝光过度,形成更加简洁的背景。我们常把这种利用曝光过度来刻画景物的照片称为高调作品。
  此外,在逆光条件下拍摄半透明的物体时,适当增加曝光量还可以增加物体的通透感。所以确切地说,“白加”是一个概念,并非单指白色景物的曝光补偿。
理解“黑减”
  简单理解,“白加黑减”中的“黑减”是拍摄深色调景物需要减少曝光量之意。比如拍摄黑色的建筑、汽车时,如果按照相机自动测光的数据进行曝光,黑色也会按照18%灰来体现,最终得到的结果也将成为灰色了。
  所以在拍摄色调深于18%及黑色物体时,应该适当减少0.5-1.5EV的曝光量,以获得正确的色彩表现。当然,减少曝光需要适度,避免主体曝光不足。
  与“白加”一样,“黑减”也是曝光补偿的一个概念。比较典型的“黑减”就是拍摄低调摄影作品。利用曝光不足使大面积的暗调景物处于黑色调之中,突出高光点或线,使画面形成暗调为主,亮点突出的艺术效果。
  此外,曝光补偿对画面反差的增加或削弱会产生一定的作用。如果需要画面中有较强的反应差,以突出主体,可以适当减少曝光;相反,如果想得到柔和的效果,可以适当增加曝光量,降低画面的反差。
  此外,在风光摄影时,减少曝光量还可以强化景物色彩,尤其是逆光拍摄时,减少曝光量还可以突出环境气氛。
数码相机的曝光
  “白加黑减”概念最初是胶片摄影时代的重要曝光技术,数码相机虽然摒弃了胶片这种感光体,但测光与曝光的概念却并没有改变。虽然数码相机的即拍即现功能成为许多摄影爱好者控制曝光的重要参照,但是数码相机的LCD显示效果却并不十分可信。尤其是如今的数码相机显示屏偏亮,显示效果极佳,但与实际拍摄效果相差很大。所以使用数码相机拍摄时,曝光的准确性极为重要。
重视直方图
  数码相机上的直方图是曝光量的曲线图,通过直方图的横轴和纵轴我们可以理性地判断曝光是否合适,影像的层次是否丰富。
  几乎所有的数码相机都有直方图功能。直方图上的坐标图形就是数码照片的色调曲线,它表示的是构成图像色调深浅的分布状况。直方图的水平轴方向是一个256级灰度标:左端为0,中间为127,右端为255。纵轴方向显示了构成各色调的像素数,线越向上就表示像素信息越多。所以,数码相机的直方图非常重要,因为图像的调整范围是有限的,前期把握好合适的曝光必然为后期调整留下更大的空间。
应用包围曝光
  由于物体的反光率是不同的,所以应该根据不同被摄体的色调、亮度进行适当的曝光补偿。尽管数码相机拍摄的曝光不足的照片,可以在后期进行一定程度的修正,但是在提高亮度的同时,会使影像暗部噪点成倍增加,从而影响画面品质,所以把握精确的测光和适度的曝光非常重要。
  但是,掌握最佳曝光需要经验的积累,对于摄影初学者而言,在对曝光控制没有把握时,使用包围曝光功能是一种非常有效的方法。
  包围曝光也称“括弧曝光”或“阶梯式曝光”,这种曝光模式是照相机利用微电脑以内测光方式测取一个曝光量的标准值,自动向曝光过度和曝光不足两侧来变化不同的曝光组合进行曝光。经过连续曝光,一般可获得“过曝、正常、欠曝”等若干照片,可以让我们从景物相同,曝光不同的多幅照片中挑选出最理想的作品,尤其是拍摄光线复杂的题材时,包围曝光往往能发挥出非常有效的作用。
  “白加黑减”不仅是一种前期曝光技术,后期同样可以应用这一法则,当然,前期曝光是基础,千万不要把希望完全寄托给电脑。
在网上搜了下,很多人都出现这样的情况。按以下方法进行,祝你成功!
用管理员运行cmd&&输入
icacls e:\ /setintegritylevel M
PHP中的Memcache详解
这篇文章主要介绍了PHP中的Memcache,从Memcache简介开始,详细讲解了如Memcache和memcached的区别、PHP的Memcache所有操作方法、每个操作方法的详细解释等,需要的朋友可以参考下
一、Memcache简介&Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached管理这些HashTable,所以速度非常快。&二、Memcache和memcached的区别&为什么会有Memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把~~~~。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。&三、Memcache的服务器端和客户端安装&分为两个过程:memcache服务器端的安装和memcached客户端的安装。&所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储。&所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。&四、PHP的Memcache客户端所有方法总结&memcache函数所有的方法列表如下:&Memcache::add – 添加一个值,如果已经存在,则返回false&Memcache::addServer – 添加一个可供使用的服务器地址&Memcache::close – 关闭一个Memcache对象&Memcache::connect – 创建一个Memcache对象&memcache_debug – 控制调试功能&Memcache::decrement – 对保存的某个key中的值进行减法操作&Memcache::delete – 删除一个key值&Memcache::flush – 清除所有缓存的数据&Memcache::get – 获取一个key值&Memcache::getExtendedStats – 获取进程池中所有进程的运行系统统计&Memcache::getServerStatus – 获取运行服务器的参数&Memcache::getStats – 返回服务器的一些运行统计信息&Memcache::getVersion – 返回运行的Memcache的版本信息&Memcache::increment – 对保存的某个key中的值进行加法操作&Memcache::pconnect – 创建一个Memcache的持久连接对象&Memcache::replace -对一个已有的key进行覆写操作&Memcache::set – 添加一个值,如果已经存在,则覆写&Memcache::setCompressThreshold – 对大于某一大小的数据进行压缩&Memcache::setServerParams – 在运行时修改服务器的参数&五、PHP的Memcache操作方法分解&Memcache::add用法&
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )
如果$key不存在的时候,使用这个函数来存储$var的值。功能相同的函数是memcache_add()。&
$key :将要存储的键值。&
$var :存储的值,字符型和整型会按原值保存,其他类型自动序列化以后保存。&
$flag:是否用MEMCACHE_COMPRESSED来压缩存储的值,true表示压缩,false表示不压缩。&
$expire:存储值的过期时间,如果为0表示不会过期,你可以用unix时间戳或者描述来表示从现在开始的时间,但是你在使用秒数表示的时候,不要超过2592000秒 (表示30天)。&
如果成功则返回 TRUE,失败则返回 FALSE。如果$key值已经存在,则会返回FALSE。 其他情况下Memcache::add()的用法类似于Memcache::set()。&
&?php&$memcache_obj = memcache_connect(”localhost”, 11211);&memcache_add($memcache_obj, 'var_key', 'test variable', false, 30);&$memcache_obj-&add('var_key', 'test variable', false, 30);&?&
Memcache::addServer用法&
bool Memcache::addServer ( string $host [, int $port [, bool $persistent [, int $weight [, int$timeout [, int $retry_interval [, bool $status [, callback $failure_callback ]]]]]]] )
添加一个可供使用的服务器地址到连接池中,连接用Memcache::addServer打开,脚本执行完后自动关闭,或者可以用Memcache::close()手动关闭。相同函数是memcache_add_server()。&
当用这个方法的时候(相对于Memcache::connect()和 Memcache::pconnect()方法),网络连接只有等需要的时候才会建立,因此不会因为增加很多的服务器到连接池而增加系统负担,因为很多服务器可能没有使用。&
故障恢复会发生在这个方法执行的任何阶段,只要其他的服务器是正常的,这些连接请求的失败用户不会注意到。任何一种socket或者memcached服务器级的错误可以触发故障恢复。正常的客户端错误比如增加一个存在的键值不会引发故障恢复。&
$host服务器的地址&
$port服务器端口&
$persistent是否是一个持久连接&
$weight这台服务器在所有服务器中所占的权重&
$timeout连接的持续时间&
$retry_interval连接重试的间隔时间,默认为15,设置为-1表示不进行重试&
$status控制服务器的在线状态&
$failure_callback允许设置一个回掉函数来处理错误信息。&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&$memcache = new M&$memcache-&addServer('memcache_host', 11211);&$memcache-&addServer('memcache_host2′, 11211);&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_add_server($memcache_obj, 'memcache_host2′, 11211);&?&&
Memcache::close用法&
bool Memcache::close ( void )&
关闭memcache服务器连接。这个函数不会关闭长连接,长连接只有在web服务器关闭或者重启的时候才会关闭。相同的函数memcache_close()&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_close($memcache_obj);&$memcache_obj = new M&$memcache_obj-&connect('memcache_host', 11211);&$memcache_obj-&close();&?&&
Memcache::connect用法&
bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )
打开memcached服务器连接,建立一个到memcached服务器的连接,用Memcache::connect打开的连接会在脚本执行完毕后自动关闭。你也可以用Memcache::close()去关闭连接。相同的函数是memcache_connect()。
$host:指向memcached正在收听的链接的主机,这个参数会有另一种特殊的连接方式unix:///path/to/memcached.sock,即用unix的域名sockets,这种情况下,端口必须设置为0&
$port:指向memcached正在收听的链接的端口,用unix的域名sockets的情况下,端口必须设置为0&
$timeout:用于连接守护进程的秒数,当你改变默认的1秒的值的时候,你需要考虑一下,如果你的连接太慢的话,你可能会失去缓存的优势。&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&$memcache_obj = memcache_connect('memcache_host', 11211);&$memcache = new M&$memcache-&connect('memcache_host', 11211);&?&&
memcache::debug&
bool memcache_debug ( bool $on_off )
控制调试功能,前提是php在编译的时候使用了-enable-debug选项,否则这个函数不会有作用。&
$on_off:true表示开启调试,false表示关闭调试&
如果php在编译的时候使用了-enable-debug选项,返回true,否则返回false&
Memcache::decrement用法&
int Memcache::decrement ( string $key [, int $value ] )
Memcache::decremen方法的作用是对保存的某个key中的值进行减法操作,用法跟Memcache::increment类似。&
你也可以用memcache_decrement()函数。&
Key:想要减少的键的名字&
Value:想要减少的值。&
如果成功,返回被减少后的值,如果失败返回false。&
&?php&$memcache = new M&$memcache-&connect('localhost', 11211);&$memcache-&set('test_item', 8);&$memcache-&increment('test_item', 4);&echo $memcache-&decrement('test_item', 7);&// 显示 5&?&&
这个例子连Memcache::increment函数都一块演示了。&
Memcache::delete用法&
bool Memcache::delete ( string $key [, int $timeout ] )
删除一个key值,如果参数$timeout被设置,那么存储的值会在设置的秒数以后过期,你也可以用函数memcache_delete()&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_delete($memcache_obj, 'key_to_delete', 10);&$memcache_obj = new M&$memcache_obj-&connect('memcache_host', 11211);&$memcache_obj-&delete('key_to_delete', 10);&?&&
Memcache::flush&
bool Memcache::flush ( void )
清除所有缓存的数据。Memcache::flush实际上没有释放资源,它仅仅将所有的缓存标记为过期,这样可以使新的缓存来覆盖被占的内存空间。一样的函数是memcache_flush()&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_flush($memcache_obj);&$memcache_obj = new M&$memcache_obj-&connect('memcache_host', 11211);&$memcache_obj-&flush();&?&&
Memcache::get&
string Memcache::get ( string $key [, int &$flags ] )&array Memcache::get ( array $keys [, array &$flags ] )
方法的作用是获取一个key值,key值可以是一个数组,结果会包含键值对。&
$key是键值或者一个键的数组值。&
$flags如果这个参数存在,那么$flags跟写入这个参数的值相关,这些$flags 类似于Memcache::set()函数里的$flags。&
如果成功,则返回key对应的值,如果失败则返回false.&
&?php&$memcache_obj = memcache_connect('memcache_host', 11211);&$var = memcache_get($memcache_obj, 'some_key');&$memcache_obj = new M&$memcache_obj-&connect('memcache_host', 11211);&$var = $memcache_obj-&get('some_key');&$memcache_obj = memcache_connect('memcache_host', 11211);&$var = memcache_get($memcache_obj, Array('some_key', 'another_key'));&$memcache_obj = new M&$memcache_obj-&connect('memcache_host', 11211);&$var = $memcache_obj-&get(Array('some_key', 'second_key'));&?&&
Memcache::getExtendedStats&
array Memcache::getExtendedStats ([ string $type [, int $slabid [, int $limit ]]] )
获取进程池中所有进程的运行系统统计。相同函数是memcache_get_extended_stats()&
$type表示要求返回的类型:reset, malloc, maps, cachedump, slabs, items,&
$slabid第一个参数设置为”cachedump”时使用的。&
$limit第一个参数设置为”cachedump”时使用的。&
如果成功,返回统计信息,失败会返回false&
&?php&$memcache_obj = new M&$memcache_obj-&addServer('memcache_host', 11211);&$memcache_obj-&addServer('failed_host', 11211);&$stats = $memcache_obj-&getExtendedStats();&//slabs机制分配管理内存的情况&$statsslab = $memcache_obj-&getExtendedStats(slabs);&?&&
Memcache::getServerStatus&
int Memcache::getServerStatus ( string $host [, int $port ] )
获取运行服务器的参数。返回一个服务器在线或者离线的状态。相同的函数是memcache_get_server_status()&
$host:正在收听的连接的主机&
$port正在收听的连接的主机的端口,默认是11211&
成功返回服务器状态,服务器没有启动会返回0,其他数字的时候表示服务器是启动状态的。&
&?php&$memcache = new M&$memcache-&addServer('memcache_host', 11211);&echo $memcache-&getServerStatus('memcache_host', 11211);&$memcache = memcache_connect('memcache_host', 11211);&echo memcache_get_server_status($memcache, 'memcache_host', 11211);&?&&
Memcache::getStats&
array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )
返回服务器的一些运行统计信息。相同的函数是memcache_get_stats()&
$type表示要求返回的类型:reset, malloc, maps, cachedump, slabs, items,&
$slabid第一个参数设置为”cachedump”时使用的。&
$limit第一个参数设置为”cachedump”时使用的。&
Memcache::getVersion&
string Memcache::getVersion ( void )
返回运行的Memcache的版本信息。相同函数memcache_get_version()&
成功返回服务器的版本信息,失败的时候返回false。&
&?php&$memcache = new M&$memcache-&connect('memcache_host', 11211);&echo $memcache-&getVersion();&$memcache = memcache_connect('memcache_host', 11211);&echo memcache_get_version($memcache);&?&&
Memcache::increment&
int Memcache::increment ( string $key [, int $value ] )
对保存的某个key中的值进行加法操作&
用法参考Memcache::decrement&
Memcache::pconnect&
bool Memcache::pconnect ( string $host [, int $port [, int $timeout ]] )
创建一个Memcache的持久连接对象&
用法与Memcache::connect()相似,不同点地方是Memcache::pconnect是建立的持久连接。这个连接在脚本执行完或者Memcache::close()函数运行也不会被关闭。与它相同的函数是memcache_pconnect()&
$host:指向memcached正在收听的链接的主机,这个参数会有另一种特殊的连接方式unix:///path/to/memcached.sock,即用unix的域名sockets,这种情况下,端口必须设置为0&
$port:指向memcached正在收听的链接的端口,用unix的域名sockets的情况下,端口必须设置为0&
$timeout:用于连接守护进程的秒数,当你改变默认的1秒的值的时候,你需要考虑一下,如果你的连接太慢的话,你可能会失去缓存的优势。&
如果成功则返回 TRUE,失败则返回 FALSE&
&?php&$memcache_obj = memcache_pconnect('memcache_host', 11211);&$memcache_obj = new M&$memcache_obj-&pconnect('memcache_host', 11211);&?&&
Memcache::replace&
bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] )
对一个已有的key进行覆写操作。相同函数是memcache_replace()&
$key :将要存储的键值。&
$var :存储的值,字符型和整型会按原值保存,其他类型自动序列化以后保存。&
$flag:是否用MEMCACHE_COMPRESSED来压缩存储的值,true表示压缩,false表示不压缩。&
$expire:存储值的过期时间,如果为0表示不会过期,你可以用unix时间戳或者描述来表示从现在开始的时间,但是你在使用秒数表示的时候,不要超过2592000秒 (表示30天)。&
如果成功则返回 TRUE,失败则返回 FALSE。如果$key值已经存在,则会返回FALSE。&
&?php&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_replace($memcache_obj, &test_key&, &some variable&, false, 30);&$memcache_obj-&replace(&test_key&, &some variable&, false, 30);&?&&
Memcache::set&
bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] )
添加一个值,如果已经存在,则覆写。相同函数是memcache_set()&
$key :将要存储的键值。&
$var :存储的值,字符型和整型会按原值保存,其他类型自动序列化以后保存。&
$flag:是否用MEMCACHE_COMPRESSED来压缩存储的值,true表示压缩,false表示不压缩。&
$expire:存储值的过期时间,如果为0表示不会过期,你可以用unix时间戳或者描述来表示从现在开始的时间,但是你在使用秒数表示的时候,不要超过2592000秒 (表示30天)。&
如果成功则返回 TRUE,失败则返回 FALSE。&
$memcache_obj = new M&$memcache_obj-&connect('memcache_host', 11211);&$memcache_obj-&set('var_key', 'some really big variable', MEMCACHE_COMPRESSED, 50);&echo $memcache_obj-&get('var_key');&
Memcache::setCompressThreshold&
bool Memcache::setCompressThreshold ( int $threshold [, float $min_savings ] )
对大于某一大小的数据进行压缩。相同的函数是memcache_set_compress_threshold()&
setCompressThreshold方法有两个参数,第一个参数表示处理数据大小的临界点,第二个参数表示压缩的比例,默认为0.2。&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&$memcache_obj = new M&$memcache_obj-&addServer('memcache_host', 11211);&$memcache_obj-&setCompressThreshold(2);&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_set_compress_threshold($memcache_obj, 2);&?&&
Memcache::setServerParams&
bool Memcache::setServerParams ( string $host [, int $port [, int $timeout [, int$retry_interval [, bool $status [, callback $failure_callback ]]]]] )
在运行时修改服务器的参数。相同函数是memcache_set_server_params()。&
$host服务器的地址&
$port服务器端口&
$timeout连接的持续时间&
$retry_interval连接重试的间隔时间,默认为15,设置为-1表示不进行重试&
$status控制服务器的在线状态&
$failure_callback允许设置一个回掉函数来处理错误信息。&
如果成功则返回 TRUE,失败则返回 FALSE。&
&?php&function _callback_memcache_failure($host, $port) {&print &memcache '$host:$port' failed&;&}&$memcache = new M&// 离线模式增加一个服务器&$memcache-&addServer('memcache_host', 11211, false, 1, 1, -1, false);&// 把服务器设成在线&$memcache-&setServerParams('memcache_host', 1, true, '_callback_memcache_failure');&$memcache_obj = memcache_connect('memcache_host', 11211);&memcache_set_server_params($memcache_obj, 'memcache_host', 1, true, '_callback_memcache_failure');&?&&
六、综合使用实例&
&?php&//连接&$mem = new M&$mem-&connect(&db.nowamagic.net&, 12000);&//保存数据&$mem-&set('key1', 'This is first value', 0, 60);&$val = $mem-&get('key1');&echo &Get key1 value: & . $val .&&br /&&;&//替换数据&$mem-&replace('key1', 'This is replace value', 0, 60);&$val = $mem-&get('key1');&echo &Get key1 value: & . $val . &&br /&&;&//保存数组&$arr = array('aaa', 'bbb', 'ccc', 'ddd');&$mem-&set('key2', $arr, 0, 60);&$val2 = $mem-&get('key2');&echo &Get key2 value: &;&print_r($val2);&echo &&br /&&;&//删除数据&$mem-&delete('key1');&$val = $mem-&get('key1');&echo &Get key1 value: & . $val . &&br /&&;&//清除所有数据&$mem-&flush();&$val2 = $mem-&get('key2');&echo &Get key2 value: &;&print_r($val2);&echo &&br /&&;&//关闭连接&$mem-&close();&?&&
如果正常的话,浏览器将输出:&
Get key1 value: This is first value&Get key1 value: This is replace value&Get key2 value: Array ( [0] =& aaa [1] =& bbb [2] =& ccc [3] =& ddd )&Get key1 value:&Get key2 value:&
七、实例程序代码分析&
初始化一个Memcache的对象:$mem = new M&
连接到我们的Memcache服务器端,第一个参数是服务器的IP地址,也可以是主机名,第二个参数是Memcache的开放的端口:$mem-&connect(&192.168.0.200&, 12000);&
保存一个数据到Memcache服务器上,第一个参数是数据的key,用来定位一个数据,第二个参数是需要保存的数据内容,这里是一个字符串,第三个参数是一个标记,一般设置为0或者MEMCACHE_COMPRESSED就行了,第四个参数是数据的有效期,就是说数据在这个时间内是有效的,如果过去这个时间,那么会被Memcache服务器端清除掉这个数据,单位是秒,如果设置为0,则是永远有效,我们这里设置了60,就是一分钟有效时间:$mem-&set(‘key1‘, ‘This is first value', 0, 60);&
从Memcache服务器端获取一条数据,它只有一个参数,就是需要获取数据的key,我们这里是上一步设置的key1,现在获取这个数据后输出输出:&
$val = $mem-&get('key1′);&echo &Get key1 value: & . $&
现在是使用replace方法来替换掉上面key1的值,replace方法的参数跟set是一样的,不过第一个参数key1是必须是要替换数据内容的key,最后输出了:&
$mem-&replace('key1', 'This is replace value', 0, 60);&$val = $mem-&get('key1');&echo &Get key1 value: & . $&
同样的,Memcache也是可以保存数组的,下面是在Memcache上面保存了一个数组,然后获取回来并输出:&
$arr = array('aaa', 'bbb', 'ccc', 'ddd');&$mem-&set('key2', $arr, 0, 60);&$val2 = $mem-&get('key2');&print_r($val2);&
现在删除一个数据,使用delte接口,参数就是一个key,然后就能够把Memcache服务器这个key的数据删除,最后输出的时候没有结果:&
$mem-&delete('key1');&$val = $mem-&get('key1');&echo &Get key1 value: & . $val . &&br /&&;
最后我们把所有的保存在Memcache服务器上的数据都清除,会发现数据都没有了,最后输出key2的数据为空,最后关闭连接:&
$mem-&flush();&$val2 = $mem-&get('key2');&echo &Get key2 value: &;&print_r($val2);&echo &&br /&&;
八、什么时候使用Memcache和Memcache的使用环境&
使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。我这里简单提出我的个人看法,未经实践,权当参考。
分布式应用&
Memcache本来支持分布式,我们客户端稍加改造,更好的支持。我们的key可以适当进行有规律的封装,比如以user为主的网站来说,每个用户都有User ID,那么可以按照固定的ID来进行提取和存取,比如1开头的用户保存在第一台Memcache服务器上,以2开头的用户的数据保存在第二胎Mecache服务器上,存取数据都先按照User ID来进行相应的转换和存取。&
但是这个有缺点,就是需要对User ID进行判断,如果业务不一致,或者其他类型的应用,可能不是那么合适,那么可以根据自己的实际业务来进行考虑,或者去想更合适的方法。&
减少数据库压力&
这个算是比较重要的,所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能极具下降,无法同时服务更多的用户,比如MySQL,特别频繁的锁表,那么让Memcache来分担数据库的压力吧。我们需要一种改动比较小,并且能够不会大规模改变前端的方式来进行改变目前的架构。&
我考虑的一种简单方法:&
后端的数据库操作模块,把所有的Select操作提取出来(update/delete/insert不管),然后把对应的SQL进行相应的hash算法计算得出一个hash数据key(比如MD5或者SHA),然后把这个key去Memcache中查找数据,如果这个数据不存在,说明还没写入到缓存中,那么从数据库把数据提取出来,一个是数组类格式,然后把数据在set到Memcache中,key就是这个SQL的hash值,然后相应的设置一个失效时间,比如一个小时,那么一个小时中的数据都是从缓存中提取的,有效减少数据库的压力。缺点是数据不实时,当数据做了修改以后,无法实时到前端显示,并且还有可能对内存占用比较大,毕竟每次select出来的数据数量可能比较巨大,这个是需要考虑的因素。&
九、Memcache的安全&
我们上面的Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。&
最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的访问能够有效阻止其他非法的访问。&
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
Memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接。&
设置防火墙&防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网IP来访问Memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的Web服务器来访问我们Memcache服务器,同时阻止其他的访问。&
# iptables -F&# iptables -P INPUT DROP&# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT&# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。&
微信公众账号在回复图片、语音、视频的时候,将使用media_id来调用相关文件,很多朋友咨询这个如何开发实现。本文将介绍在微信公众平台开发过程中,如何上传下载多媒体文件。
一、上传多媒体文件
公众号可调用本接口来上传图片、语音、视频等文件到微信服务器,上传后服务器会返回对应的media_id,公众号此后可根据该media_id来获取多媒体。请注意,media_id是可复用的,调用该接口需http协议。
通常,文件上传是通过html表单进行的,但&通过CURL可以不经过浏览器,直接在服务器端进行表单的POST提交,完成文件上传功能。
需要注意的是:文件名必须是&完整绝对路径&,另外需要&绝对路径前加上“@”&以示区分。
在Windows服务器上,格式示例为:”@F:\israel\upload\winter.jpg”,而在Linux服务器上,格式示例为:”@home/israel/upload/winter.jpg”。
http请求方式: POST/FORM
access_token
调用接口凭证
媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
form-data中媒体文件标识,有filename、filelength、content-type等信息
//上传图片 $type = &image&; $filepath = dirname(__FILE__).&\winter.jpg&; $filedata = array(&file1& =& &@&.$filepath); $url = &http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type&; $result = https_request($url, $filedata); var_dump($result); function https_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $ }
{ &type&: &image&, &media_id&: &QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l&, &created_at&:
//上传语音 $type = &voice&; $filepath = dirname(__FILE__).&\invite.mp3&; $filedata = array(&file1& =& &@&.$filepath); $url = &http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type&; $result = https_request($url, $filedata); var_dump($result);
{ &type&: &voice&, &media_id&: &5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk&, &created_at&:
//上传视频 $type = &video&; $filepath = dirname(__FILE__).&\bbb.mp4&; $filedata = array(&file1& =& &@&.$filepath); $url = &http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type&; $result = https_request($url, $filedata); var_dump($result);
{ &type&: &video&, &media_id&: &Jm-Wq0nXtA_oN1qNydQRP03dCsB0R2t5gCHDM3QNkBmMRE1WBaorVJNQTBRHvK9-&, &created_at&:
上传缩略图
//上传缩略图 $type = &thumb&; $filepath = dirname(__FILE__).&\qrcode.jpg&; $filedata = array(&file1& =& &@&.$filepath); $url = &http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type&; $result = https_request($url, $filedata); var_dump($result);
{ &type&: &thumb&, &thumb_media_id&: &2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79&, &created_at&:
媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图)
媒体文件上传后,获取时的唯一标识
created_at
媒体文件上传时间戳
上传的多媒体文件有格式和大小限制,如下:
?& 图片(image): 128K,支持JPG格式
?& 语音(voice):256K,播放长度不超过60s,支持AMR\MP3格式
?& 视频(video):1MB,支持MP4格式
?& 缩略图(thumb):64KB,支持JPG格式
媒体文件在后台保存时间为3天,即3天后media_id失效。&对于需要重复使用的多媒体文件,可以每3天循环上传一次,更新media_id。
二、下载多媒体文件
公众号可调用本接口来获取多媒体文件。请注意,视频文件不支持下载,调用该接口需http协议。
下载文件使用获取图片数据,写入新文件的方法。
http请求方式: GET
access_token
调用接口凭证
媒体文件ID
$access_token = &&; //下载图片 $mediaid = &QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l&; $url = &http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$access_token&media_id=$mediaid&; $fileInfo = downloadWeixinFile($url); $filename = &down_image.jpg&; saveWeixinFile($filename, $fileInfo[&body&]); function downloadWeixinFile($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_NOBODY, 0); //只取body头 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $package = curl_exec($ch); $httpinfo = curl_getinfo($ch); curl_close($ch); $imageAll = array_merge(array('header' =& $httpinfo), array('body' =& $package)); return $imageA } function saveWeixinFile($filename, $filecontent) { $local_file = fopen($filename, 'w'); if (false !== $local_file){ if (false !== fwrite($local_file, $filecontent)) { fclose($local_file); } } }
返回HTTP头示例如下
{ &url&: &http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l&, &content_type&: &image/jpeg&, &http_code&: 200, &header_size&: 308, &request_size&: 316, &filetime&: -1, &ssl_verify_result&: 0, &redirect_count&: 0, &total_time&: 1.36, &namelookup_time&: 1.016, &connect_time&: 1.078, &pretransfer_time&: 1.078, &size_upload&: 0, &size_download&: 105542, &speed_download&: 77604, &speed_upload&: 0, &download_content_length&: 105542, &upload_content_length&: 0, &starttransfer_time&: 1.141, &redirect_time&: 0 }
//下载语音 $mediaid = &5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk&; $url = &http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$access_token&media_id=$mediaid&; $fileInfo = downloadWeixinFile($url); $filename = &down_voice.mp3&; saveWeixinFile($filename, $fileInfo[&body&]);
返回HTTP头如下
{ &url&: &http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk&, &content_type&: &audio/amr&, &http_code&: 200, &header_size&: 306, &request_size&: 316, &filetime&: -1, &ssl_verify_result&: 0, &redirect_count&: 0, &total_time&: 0.125, &namelookup_time&: 0.031, &connect_time&: 0.063, &pretransfer_time&: 0.063, &size_upload&: 0, &size_download&: 10470, &speed_download&: 83760, &speed_upload&: 0, &download_content_length&: 10470, &upload_content_length&: 0, &starttransfer_time&: 0.125, &redirect_time&: 0 }
可以看出,MP3的语音格式被压缩成AMR格式了。
下载缩略图
//下载缩略图 $mediaid = &2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79&; $url = &http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$access_token&media_id=$mediaid&; $fileInfo = downloadWeixinFile($url); $filename = &down_thumb.jpg&; saveWeixinFile($filename, $fileInfo[&body&]);
返回HTTP头如下
{ &url&: &http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79&, &content_type&: &image/jpeg&, &http_code&: 200, &header_size&: 306, &request_size&: 316, &filetime&: -1, &ssl_verify_result&: 0, &redirect_count&: 0, &total_time&: 0.094, &namelookup_time&: 0, &connect_time&: 0.047, &pretransfer_time&: 0.047, &size_upload&: 0, &size_download&: 6057, &speed_download&: 64436, &speed_upload&: 0, &download_content_length&: 6057, &upload_content_length&: 0, &starttransfer_time&: 0.094, &redirect_time&: 0 }
至于回复相应的消息,就是利用消息接口或者客服接口,构造成相应的消息就行了,和构造文本,图文消息的方法是一样的。
一、下载相关软件:
1、VC9运行库 即VISUAL C++ 2008
自PHP5.3.0开始,PHP提供VC2008编译版,需要安装VC++ 2008的运行库。
[微软官方下载]
[CSDN下载]
2、FastCGI 1.5 for IIS x86 / x64
自从PHP5.3.0开始,由于一直以来PHP+ISAPI的稳定性有问题,在IIS平台上PHP取消了ISAPI模块的支持,只支持FastCGI运行方式。
[微软官方下载]
[CSDN下载]
3、PHP5.3.29(注意:下载 Non Thread Safe 版本)
[PHP官方下载]
[CSDN下载]
4、MySQL5.5.38
5、Memcached服务端
[CSDN下载]
6、Memcached的PHP客户端(注意:下载 Non Thread Safe 版本)
1、安装VC9运行库 即VISUAL C++ 2008
2、安装FastCGI
安装成功后会在 C:\WINDOWS\system32\inetsrv\ 目录下搞出了5个文件,如下图所示:
这个时候在IIS 6的“WEB服务扩展”里就多出了一个FastCGI Handler,如下图所示:
3、安装PHP
3.1.把 php-5.3.29-nts-Win32-VC9-x86.zip 解压到目录 D:\Program Files\PHP,并赋予IIS启动帐户的对该目录读取和运行的权限,如下图所示:
3.2.注册PHP到FastCGI
打开 C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件,在[Types]下面添加以下配置:
[Types]php = PHP
[PHP]ExePath = &D:\Program Files\PHP\php-cgi.exe&
MaxInstances = 20QueueLength = 1000InstanceMaxRequests = 10000EnvironmentVars = PHP_FCGI_MAX_REQUESTS:10000RequestTimeout = 500ActivityTimeout = 900
3.3.编辑php.ini
(1)拷贝一份 php.ini-production ,并重命名为 php.ini
(2) extension_dir = &D:/Program Files/PHP/ext&
(3) 去掉 ;fastcgi.impersonate = 1 前面的“;”
(4) 搜索Windows Extensions,将以下这些常用扩展前面的分号“;”去掉:
; extension=php_curl.dll; extension=php_gd2.dll ; extension=php_ldap.dll ; extension=php_mbstring.dll ; extension=php_exif.dll ; extension=php_mysql.dll ; extension=php_mysqli.dll ; extension=php_sockets.dll ; extension=php_xmlrpc.dll
(5) 搜索;date.timezone = 去掉前面的分号,将其设置为 date.timezone = Asia/Shanghai
如果不修改date.timezone,打开网页的时候蛮有可能提示500错误。
(6) 上传文件参数配置,参考
4、配置网站
打开IIS 6管理器,在“网站”上点右键 --& 属性 --& 主目录 --& 配置 --& 添加,如下图所示:
可执行文件路径是: C:\WINDOWS\system32\inetsrv\fcgiext.dll
其它的也顺便配置下:
在网站中写个 index.php文件,输入 &?php phpinfo(); ?&,重启IIS,浏览下页面:
5、搭建Memcached缓存服务器
#配置PHP的memcache客户端:
编辑 php.ini,添加 extension=php_memcache.dll,重启IIS。
6、搭建 MySQL服务器
[导读] 本文章来给大家总结了一些常用的关于在php定时执行任务实现方法详解,包括直接利用php来操作,还有使用操作系统的计划任务来操作,有需要了解的同学可参考。每个PHP脚本都限制了执行时间,所以我们需要通过 se
本文章来给大家总结了一些常用的关于在php定时执行任务实现方法详解,包括直接利用php来操作,还有使用操作系统的计划任务来操作,有需要了解的同学可参考。
每个PHP脚本都限制了执行时间,所以我们需要通过 set_time_limit 来设置一个脚本的执行时间为无限长;然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。 当我们执行后,每隔5秒钟,我们会得到一行 Hello World 代码如下 复制代码
header(&Content-Type: text/plain&);set_time_limit(0);
$infoString = &Hello World& . &n&;while( isset($infoString) ){echo $infoSflush();ob_flush();sleep(5);}
例 代码如下 复制代码
&?php ignore_user_abort(); // 即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去 $interval=20; // 时间间隔 单位 秒 $key_file=&key.txt&; // 配置文件 if (isset($_GET['s'])) { if ($_GET['s']==&0&){ // 停止工作,但不退出 $s=&false&; echo &Function is off&; } elseif ($_GET['s']==&1&){ // 工作 $s=&true&; echo &Function is on&; } elseif ($_GET['s']==&2&){ // 退出 $s=&die&; echo &Function exited&; } else die(&Err 0:stop working 1:working 2:exit&); $string = &&?phpn return &&.$s.&&;n?&&; write_inc($key_file,$string,true); exit(); } if(file_exists($key_file)){ do{ $mkey =
$key_ if ($mkey==&true&){ // 如果工作 ///////////////////// 工作区间 ////////////////////////////////// $showtime=date(&Y-m-d H:i:s&); $fp = ('func.txt','a'); fwrite($fp,$showtime.&n&); fclose($fp); /////////////////////////////////////////////////////////////////// } elseif ($mkey==&die&){ // 如果退出 die(&I am dying!&); } sleep($interval); // 等待$interval分钟 }while(true); } else die($key_file.& doesn't exist !&); function write_inc($path,$strings,$type=false) { $path=dirname(__FILE__).&/&.$ if ($type==false) file_put_contents($path,$strings,FILE_APPEND); else file_put_contents($path,$strings); } ?&
个人觉得在php定时执行任务还是有点复杂并且不好使用,下面我来介绍在操作系统中计划任务来实现。
在网上找了些WINDOWS执行PHP的计划任务的方法,有一个写得很全,可惜在我这竟然没通过。最后不得不综合各门派的方法,才能在我这运行成功。
1、写一个PHP程序,命名为test.php,内容如下所示: 代码如下 复制代码
$fp = fopen(&test.txt&, &a+&);
fwrite($fp, date(&Y-m-d H:i:s&) . & 成功成功了!n&);
fclose($fp);
程序大胆地写,什么includerequire尽管用,都没问题2、新建Bat文件,命名为test.bat,内容如下所示: 代码如下 复制代码
D:phpphp.exe -q D:websitetest.php
//相应目录自己改上
3、建立WINDOWS计划任务:开始–&控制面板–&任务计划–&添加任务计划浏览文件夹选择上面的bat文件设置时间和密码(登陆WINDOWS的)保存即可了。4、over! 可以右键计划任务点“运行”试试

我要回帖

更多关于 weixinfile怎么打开 的文章

 

随机推荐