分类目录归档:技术

php文件操作基础

在有些场合中需要以文件的形式来对内容进行存储,通常这时候需要对文件进行一系列的操作,PHP中对于文件的操作跟其他计算机程序设计语言对文件的操作类似,对于文件的操作主要包括三个部分,以及围绕这三部分提供的辅助性函数来完成文件操作的工作。

(1)文件的创建与打开;
(2)文件的操作;
(3)文件的关闭;

在PHP中,通过一系列的函数来完成文件的操作,常用的函数及其简要说明罗列如下:

//文件打开,完成文件打开(在文件不存在时可创建文件),依赖于文件中模式的不同而具有不同的操作
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
//$filename 打开或者要创建文件的路径及文件名,为了便于移植,使用反斜杠/为佳
//$mode 是文件打开的模式,有很多模式,比较常用的r,w,a,同样为了便于移植,建议mode中增加b(二进制)
//通常读文件为 rb ,写文件为 ab,分别表示以二进制读文件及以二进制向文件追加内容
//在文件打开操作过程中出现错误请首先检查文件所在的路径的权限设置

//文件操作函数

//写操作相关函数
//把$string的内容写到文件指针$handle
int fwrite ( resource $handle , string $string [, int $length ] )  
//函数是fwrite的别名函数
fputs() 

//也能完成写操作,不同的是集成了fopen(),fwrite(),fclose(),使用该函数不用再打开关闭文件
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) 

//读操作相关函数
//逐行读取
string fgets ( resource $handle [, int $length ] ) 
//逐行读,能够过滤标记
string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] ) 
//逐行读,能够根据定界符输出到数组
array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\\' ]]]] )
//一次性读取一个文件并将文件内容发送到标准输出,包含了文件打开与文件关闭操作
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
//先要打开文件,然后将文件指针所指向的文件内容发送到标准输出
int fpassthru ( resource $handle )
//把结果发送到一个数组中
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
//一次读取一个字符
string fgetc ( resource $handle )
//读取任意长度字节的内容
string fread ( resource $handle , int $length )

//文件关闭
bool fclose ( resource $handle )

//文件操作中常用的函数
//检查文件或目录是否存在
bool file_exists ( string $filename )
//获取文件大小,返回文件大小的字节数
int filesize ( string $filename )
//删除文件
bool unlink ( string $filename [, resource $context ] )
//复位文件指针位置
bool rewind ( resource $handle )
//在文件指针中定位
int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )

函数的具体详细的说明在php.net上可以查到,下面练习一下文件的操作,练习名称为『简易日记』,需求如下:

(1)每日记录的内容以年-月-日.txt保存在数据目录下;
(2)首页写日记,并显示以往的记录;
(3)显示单页记录内容;

日记填写界面:

diary

具体代码如下

首页(index.php)



  
    
    简易日记--php文件操作练习
    
  
  
    

我的日记本

写日记

日记主题

日记内容


日记列表


$value" . " | "; } ?>

保存处理页(diaryprocessed.php)

当前不能处理您提交的日志,请稍后再试!

"; echo "返回"; } fwrite($fp,$output); flock($fp,LOCK_UN); fclose($fp); echo '日记提交成功!'; echo "返回";

查看内容页(viewdiary.php)




  
    
    简易日记
    
  
  
    写日记
    

所有源文件下载:diary

-EOF-

维护个人站点常用到的操作备忘

如果拥有自己的主机或者vps,在日常中的维护中会有一些操作,主要体现在内容更新、备份,数据库备份,本地测试等诸多内容。我选用的是Linode VPS,用的是ubuntu作为操作系统,上面主要部署了自己的web站点和基于wordpress的个人博客,日常难免进行一些维护,由于维护不是非常的频繁,所以有必要对用到的操作做一下备忘记录。

1、mysql的备份与恢复

数据备份
mysqldump -uroot -p yourdestdb> target.sql
其中 
yourdestdb 是要备份的数据库
> 是备份符号
target.sql 是备份的文件名

数据恢复
mysql -uroot -p yourtargetdb< /destpath/dest.sql
其中
yourtargetdb 是要恢复的目标数据库
< 是恢复符号
destpath 是备份数据文件的路径
dest.sql 是备份文件名

2、文件目录的压缩

tar -cpzf /backup/target.tar.gz /dest
压缩dest目录,保存在backup目录中,压缩文件为target.tar.gz
c 新建 p 保留权限 z 使用gzip处理 f 指定存档或设备

3、在本地调试wordpress

有时会需要需要在本地调试wordpress,将vps上的数据导入本地后,需要处理四部分的内容

(1)修改配置文件wp-config.php,使用文本编辑器打开编辑
(2)修改数据库表wp_options中的option_value替换为本地url
(3)修改数据库表wp_posts中的guid替换为本地url
(4)修改数据库表wp_posts中的post_content替换为本地url

update wp_options set option_value = replace(option_value,"http://www.youinterneturl.com","http://youlocalhosturl");
update wp_posts set guid = replace(guid,"http://www.youinterneturl.com","http://youlocalhosturl");
update wp_posts set post_content = replace(post_content,"http://www.youinterneturl.com","http://youlocalhosturl");

-EOF-

几个常看到的词语的解释

经常看到ARPU多少多少,常见于各种运营商及网络游戏相关文档中,今天扒弄了一下,了解了一下,有必要记录一下。

ARPU指每用户平均收入,其英文为Average Revenue Per User,根据时间周期,按照该时间周期的收入与该时间周期的用户数算的的值,不同公司的计算方式的区别主要在用户数上,有按照平均在线用户数计算的,有按照付费用户数计算的,有按照活跃用户数计算的,觉得比较靠谱的应该按照付费用户数计算,这样来的最直接。

—————-我是分割线———————–

最近上网浏览的时候,如果需要阅读一下其HTML代码的时候,经常就会看到viewport meta的标记,看到标记中内容中有device字样,猜测跟设备有关,于是在网上搜索了关于该标记的使用说明,在此做个记录。

viewport meta 标签用于在手机浏览器上控制页面的布局,网上参考的相关文档如下:

Mozilla的《Using the viewport meta tag to control layout on mobile browsers
Apple的《Using the Viewport Meta Tag

其常见的属性如下:

width:控制viewport的大小,可以指定具体的值,也可以使用设备宽device-width
height:控制viewport的高,跟width类同
initial-scale:初始缩放比例
maximum-scale:最大缩放比例
minimum-scale:最小缩放比例
user-scalable:用户是否可以缩放

简单的测试一下,测试代码如下:



  
    viewport meta tag test page
    
    
    
  
  
    

Hello World!

手机浏览效果:

viewport01viewport02

 

 

Node.js学习笔记(一)

Javascript是一种脚本语言,应用于浏览器,在浏览器上下文中解释和执行,如果脱离了浏览器,则需要一个能对其进行解释和执行的对应环境,Node.js就提供这样一种环境,能够在服务器端编写Javascript应用,在服务器端运行时对Javascript代码进行解释然后正确执行,Node.js使用Google V8引擎来解释和执行Javascript代码。

《Node 入门》学习

Node.js同时提供内置的接口模块组成一个开发框架,可以在上面快速建立可扩展的Web应用。Node.js是基于事件驱动的,采用非阻塞I/O模型,单线程或单进程运行,能够较好的支持跨不同设备的数据密集型实时应用。

要使用Node.js首先需要进行安装,Node.js支持Windows OS、Mac OS、Linux OS,目前Node.js最新版本为0.10.2,同时Node.js也是开源的。

关于Node.js如何安装,请参阅《官方安装指南》。

安装完毕后,照例来一个Hello World!来看看是否正常运行。用文本编辑器创建一个helloworld.js文件并输入代码

console.log("Hello World!");

命令行窗口到该js文件所在目录,录入node helloworld.js,如果能正常看到命令行输出Hello World!就表示安装OK。

helloworld cmd

Node.js提供了不少的网络模块,HTTP、DNS、NET、UDP、HTTPS等,可以很方便的进行服务器的开发,使用浏览器来访问Node.js应用可以使用其提供的模块,依旧以Hello World!为例,使用HTTP模块建立一个http服务器,使用web浏览器访问返回Hello World!,修改helloworld.js文件。

var http = require("http");

http.createServer(function(request,response) {
    response.writeHead(200,{"Content-type": "text/plain"});
    response.write("Hello World!");
    response.end();
}).listen(9999);

这样就建立了一个简单的http服务器,在本地监听9999端口,对于http请求,该服务器返回一个http状态为200,http头类型为Content-Type,其值为text/plain,并向http主体发送Hello World!文字的响应。

在命令行再次录入node helloworld.js ,回车

http server

进入监听http请求状态,打开web浏览器,在浏览器地址栏中输入http://localhost:9999/,回车,显示如下

helloworldbrowser

很容易就构建了一个http服务器,在createServer函数参数中使用匿名函数来最为回调函数监听http请求,有任何http请求后,Node.js就调用该回调函数处理请求,并给出响应。

使用Node.js的模块使用require,类似于Java的Import、C#的Using等,创建一个项目时,会根据设计划分为不同的模块,在一个模块中调用另外一个模块公开的函数,这样的函数需要导出,导出模块中的函数使用exports。具体为 exports.外模块调用函数名 = 导出的函数名。做个练习,server.js构建上述http服务器,index.js为项目入口模块。

server.js代码

var http = require("http");
function start() {
    http.createServer(function(request, response) {
        response.writeHead(200,{"Content-Type": "text/plain"});
        response.write("Hello World!\n");
        response.write("Exports function start");
        response.end();
    }).listen(9999);
}

exports.go = start;

index.js代码

var server = require("./server");
server.go();

http服务器一般情况下根据请求的不同给予不同的反馈,所以需要对于不同的请求做不同的处理,http请求包括URL及GET/POST参数,这些数据都包含在匿名函数request对象中。

—————–我是分割线———————–

继续下去应该先对Javascript进行必要的学习,同时需要粗略的看看node.js的API文档。

用户名与密码正确无法登入wordpress后台

在wordpress部署完毕后,在用户名与密码输入正确后却无法登录入wordpress的仪表盘,上次在安装部署后碰到该问题,通过google寻找到解决方法,这次升级覆盖了文件,又碰到这个问题,索性在这里记录一下,以方便以后快速的查询。

如果您在录入正确的用户及密码后,提交又返回登录页面,可尝试采用这种方法来进行解决。

寻找/wp-includes/pluggable.php文件,定位到wp_set_auth_cookie函数,查找该函数中:

setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);

将ADMIN_COOKIE_PATH,修改为SITECOOKIEPATH即可,修改后如下:

setcookie($auth_cookie_name, $auth_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure, true);

将cookie的作用目录由/wp-admin目录变为wordpress的根目录。这样设置后,解决该问题。