使用远程文件、连接处理、数据库持久连接

使用远程文件

大家知道我们可以通过include、require等方法引用本地的其他文件,如果给它们传递一个远程文件的url,也是可以引用的,只要在php.ini中激活allow_url_fopen选项。
栗子:
$file = fopen ("http://www.example.com/", "r”); //以读的方式打开远程文件
$line = fgets ($file, 1024);//读取文件内容
fclose($file); //释放文件句柄
如果有合法的访问权限,以一个用户的身份和某 FTP 服务器建立了链接,还可以向该 FTP 服务器端的文件进行写操作。只能用该方法来创建新的文件,如果尝试覆盖已经存在的文件,fopen() 函数的调用将会失败,栗子:
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w”); //以写的方式打开远程文件
fwrite ($file, $_SERVER['HTTP_USER_AGENT'] . "\n”);//向文件中写数据。

连接处理

在php内部,系统维护着连接状态,这个连接指的是远程客户端和本地服务器的连接,有三种情况: 0-NORMAL(正常),1-(ABORTED)异常退出,2-TIMEOUT超时。当php脚本运行状态为NORMAL时,连接是有效的,当远程客户端终中断连接时ABORTED标记被打开,当连接时间超过PHP的时限(时限通过set_time_limit()函数设置)时,TIMEOUT被打开。
默认情况下,远程客户端中断连接时php脚本自动退出,这个处理过程可以通过php.ini 的 ignore_user_abort选项 或由 httpd.conf 设置中对应的“php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果想在客户端中断连接的情况下继续执行脚本,可以通过 register_shutdown_function() 设置关闭触发函数。这个关闭触发函数表示:当远程客户端中断连接后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。
脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 httpd.conf 设置中对应的“php_value max_execution_time”参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。 ABORTED 和 TIMEOUT 状态可以同时被打开,当PHP 忽略用户的退出操作时,用户中断了连接,脚本继续执行,但是超过了max_execution_time,超时脚本自动退出,设置过的关闭触发函数也将被执行。

数据库持久连接

持久连接是指在脚本结束运行时不关闭的连接,当收到一个持久连接的请求时,PHP 将检查是否已经存在一个相同(前面已经开启的、相同用户名和密码)的持久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接,持久连接并不提供任何附加的功能,它和非持久连接的区别只是脚本结束时释放不释放连接而已,前提是在脚本中没有手动调用关闭连接的函数,因为一旦调用关闭连接的函数,不管是否是持久连接都会释放连接的。
使用持久连接的好处:提高效率。web服务器创建到数据库的连接其实是很耗时的,特别是一个web服务器需要访问多种数据库、数据库分布在一个集群上的时候,使用持久连接可以在每个子进程的声明周期中只有一次连接数据库操作,而不是每次执行一个sql时都要重新发起一次连接。如果持久连接的子进程数目超过了设定的数据库连接数限制,系统将会产生一些问题。栗子:如果数据库的同时连接数限制为 16,有 17 个线程试图连接,那么有一个线程将无法连接。如果这个时候,在脚本中出现了使得连接无法关闭的错误(例如无限循环),则该数据库的 16 个连接将迅速地受到影响。
在使用持久连接时还有一些其他问题需要注意,如果在持久连接中使用数据表锁,脚本不知道什么原因被异常退出了,这个时候连接没有释放,那么后面的进程再使用相同连接时也不能向这个数据表写数据了,这时候只能重启httpd服务或数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用 register_shutdown_function() 函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,736评论 3 64
  • 需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(D...
    极简纯粹_阅读 7,399评论 0 46
  • 幻化为蝶(爱上一叶浮萍) 我愿幻化为蝶 在梦里点燃心中那团火 穿越时空和你牵手相握 翩翩起舞 只为了与你一起飞翔的...
    爱上一叶浮萍阅读 546评论 4 9
  • 有时候看到别人的经历或待遇比自己好时,会期待着自己也能有此等的运气,但往往事与愿违。当自己特别关注这种落差时,自悯...
    李廷未阅读 852评论 2 0