本来的想法是不老改变的东西,直接生成静态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
文件生成成功。
想放个鸡汤清醒下我,嗯,就这样吧~~~