php db static,PHP数据库静态化 - Star0_0Sky的个人空间 - OSCHINA - 中文开源技术交流社区...

本来的想法是不老改变的东西,直接生成静态json文件,但是老师说为了扩展要写数据库,那就写一个静态化处理,在每次客户端提交时候,重新生成静态json。

数据库建表:

创建一个大的服务项目

#创建服务类型(大)

create table big_project(

big_id int unsigned not null auto_increment primary key,

project varchar(40) not null unique

);

创建一个小的服务项目

#创建服务类型(小)

create table small_project(

small_id int unsigned not null auto_increment primary key,

big_id int unsigned not null,

project varchar(40) not null unique,

FOREIGN KEY (big_id) REFERENCES big_project(big_id) on delete cascade

);

/**

* 用于静态项目

*/

//ini_set("display_errors", "On");

//error_reporting(E_ALL | E_STRICT);

require dirname(__FILE__).'/../mysql/mysql_static.php';

$mysql= new MySql_static();

$big=$mysql->big_project();//列出大项目都有什么

$arr=array(); //用于json格式化使用

foreach ($big as $big_v) {

$small=$mysql->small_project($big_v['big_id']);//列出大项目中的小项都有什么

if(empty($small)){

$arr[$big_v['project']]='';//用于保证在json中小项不存时,大项依旧可见

}

foreach ($small as $small_v) {

$arr[$big_v['project']][]=$small_v['project'];

}

}

//echo json_encode($arr,JSON_UNESCAPED_UNICODE); //查看格式化结果

$myfile = fopen("file/project_static.json", "w") or die("Unable to open file!");

fwrite($myfile, json_encode($arr,JSON_UNESCAPED_UNICODE));//写入文件

上面的PHP代码,在文件生成卡了好久,网上有很多解决方法,比如手动生成后修改权限在操作,更有意思的是有人要先改权限再创建,连文件都没有还改权限。

我觉得网上的很多方法都不是本质性解决问题的关键,也折腾很久发现了问题所在

[root@ html]# ll

drwxr-xr-x 2 apache apache 4096 Dec 3 16:02 a

drwxr-xr-x 6 root root 4096 Dec 3 08:58 consumer

drwxr-xr-x 7 starsky root 4096 Dec 3 11:01 merchant

将文件生成在其他目录时发现了玄机,我的web目录下有三个文件,有着不同的所有者,看到这我就明白了,PHP文件生成是由服务器完成,所有着就是apache,服务文件夹是由ftp上传,所以所有者是ftp账户,这也就是我为什么在服务文件夹下无法生成文件的主要原因,解决方法是在服务文件夹新建一个所有者为apache的文件夹。

[root@ static]# mkdir file

[root@ static]# ll

total 8

drwxrwxr-x 2 root root 4096 Dec 3 16:08 file

-rw-r--r-- 1 starsky root 924 Dec 3 16:07 project_static_up.php

[root@ static]# chown apache file

[root@ static]# ls file/

a.txt

文件生成成功。

想放个鸡汤清醒下我,嗯,就这样吧~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值