object

循环语句

for

<?php
for($i=0;$i<99999;$i++){
echo "<br>$i.hello beijing!";
}
?>

while

<?php
$a = 0;
while ($a<100){
echo "<br>$a.hello qingdao!";
$a = $a+1;
}
?>

do while

<?php
$s = 1;
do{
echo "<br>$s.hello jinan!";
$s = $s+1;
}while($s<100);
?>

foreach

foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。

<?php 
$colors = array("red","green","blue","yellow");

foreach ($colors as $value) {
echo "$value <br>";
}
?>
<pre name="code" class="php"><?php
$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
echo $key."=>".$value."\n";
}
?>
结果如下:
1=>111
2=>222
3=>333

ubuntu 16.04 开发环境

全新虚拟机,数据源切换为阿里,

nginx version: nginx/1.12.2
sqlite 3.7.17-8.el7
php5.6

install ssh

sudo apt install ssh
service ssh status

安装nginx

sudo apt install nginx

// 安装完毕后是 root 用户,改一下用户,
sudo chown -R ubuntu:ubuntu /var/log/nginx
sudo chown -R ubuntu:ubuntu /etc/nginx

// restart
sudo nginx -s reload

// start
sudo nginx

访问以下网页 http://192.168.153.141/ 应该看到 nginx 的信息

the configuration file /etc/nginx/nginx.conf
default index.html located in /usr/share/nginx/html

sqlite3

sudo apt-get install sqlite3
sqlite3 -version

源码安装 php5.6.40

tar -jxf filename.tar.bz2

apt-get install \
build-essential \
gcc \
g++ \
autoconf \
libiconv-hook-dev \
libmcrypt-dev \
libxml2-dev \
libmysqlclient-dev \
libcurl4-openssl-dev \
libjpeg8-dev \
libpng12-dev \
libfreetype6-dev \
openssl \
libssl-dev


编译环境

apt-get install \
build-essential \
gcc \
g++ \
autoconf \
libiconv-hook-dev \
libmcrypt-dev \
libxml2-dev \
libmysqlclient-dev \
libcurl4-openssl-dev \
libjpeg8-dev \
libpng12-dev \
libfreetype6-dev \
openssl \
libssl-dev

配置编译

./configure –prefix=/opt/php –with-config-file-path=/opt/php/lib –enable-mbstring –enable-ftp –with-gd –with-jpeg-dir=/usr –with-png-dir=/usr –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-openssl-dir=/usr –with-pdo-mysql=mysqlnd –with-pear –enable-sockets –with-freetype-dir=/usr –enable-gd-native-ttf –with-libxml-dir=/usr –with-xmlrpc –enable-zip –enable-fpm –enable-fpm –with-freetype-dir=/usr/lib/ –enable-cli

./configure --prefix=/usr/local/php \
--with-config-file-path=/etc/php --with-jpeg-dir=/usr --with-png-dir=/usr \
--enable-ftp \
--enable-debug \
--enable-fpm \
--enable-pcntl \
--enable-mysqlnd \
--enable-opcache \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-shmop \
--enable-zip \
--enable-soap \
--enable-xml \
--enable-mbstring \
--disable-rpath \
--with-pcre-regex \
--with-iconv \
--with-zlib \
--with-mcrypt \
--with-gd \
--with-openssl \
--with-mhash \
--with-xmlrpc \
--with-curl \
--with-imap-ssl

make

sudo make install

sudo mkdir /etc/php

sudo cp php.ini-development /etc/php/php.ini

将PHP的可执行目录添加到环境变量中
使用Vim/Sublime打开~/.bashrc,在末尾添加如下内容:

export PATH=/usr/local/php/bin:$PATH
export PATH=/usr/local/php/sbin:$PATH

添加完毕后

source ~/.bashrc

此时就可以通过 php –version 查看php版本了。
php -m 查看已安装的扩展

php5

安装对应模块-然后在 phpinfo 里面检查是否安装正确

删除自带的php
sudo apt install aptitude
sudo aptitude purge dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/nginx-mainline

sudo apt-get update
sudo apt-get install php5.6

sudo apt-get install php5.6-fpm php5.6-mysql php5.6-common php5.6-curl php5.6-cli php5.6-mcrypt php5.6-mbstring php5.6-dom

sudo apt-get install php5.6-cgi php5.6-cli php5.6-curl php5.6-imap php5.6-gd php5.6-sqlite3 php5.6-mbstring php5.6-json php5.6-bz2 php5.6-mcrypt php5.6-xmlrpc php5.6-gmp php5.6-xsl php5.6-soap php5.6-xml php5.6-zip php5.6-dba php5.6-dom php5.6-fpm
sudo php -v

test php support is ok

nano /usr/share/nginx/html/phpinfo.php

<?php
phpinfo();
?>
module comment
php56-php-mbstring 字符集支持
php56-pdo sqlite3 数据库支持
php56-gd gd扩展是一个开源的图像处理库,支持JPG、PNG、GIF等常见的图片格式。

配置PHP5.6

//need restart nginx
sudo nginx -s reload

安装完 pdo 需要重启
service php-fpm restart

5.启用php5-mcrypt:
sudo phpenmod mcrypt

6.重启php5-fpm:
sudo service php5.6-fpm restart

support php

这里先配置,安装完 php 在测试结果

执行命令 cd /etc/nginx/conf.d 打开 Nginx 服务配置文件目录。
执行命令 sudo nano php56.conf 创建域名规则配置文件
每个域名建立一个独立的配置文件,输入下面配置信息。

server
{
listen 80; #监听端口设为 80。
server_name www.php56.com php56.com 192.168.153.141; #绑定您的域名。
index index.htm index.html index.php; #指定默认文件。
root /var/www/php56; #指定网站根目录。
# include location.conf; #当您需要调用其他配置文件时才粘贴此项,如无需要,请删除此项。

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}

# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
# Fastcgi服务器和程序(PHP,Python)沟通的协议.
location ~ \.php$ {
# 设置监听端口
fastcgi_pass 127.0.0.1:9000;
# 设置nginx的默认首页文件(上面已经设置过了,可以删除)
fastcgi_index index.php;
# 设置脚本文件请求的路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 引入fastcgi的配置文件
include fastcgi_params;
}
}

重启服务,然后访问 phpinfo.php 页面
// restart
sudo nginx -s reload

配置防火墙

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

测试

http://SERVER_DOMAIN_NAME_OR_IP

配置文件和路径

默认web服务路径/etc/nginx
主配置文件 /etc/nginx/nginx.conf
虚拟主机配置文件可以添加到 /etc/nginx/conf.d
默认文档 /usr/share/nginx/html

debug

ide 所在的机器是本地端,php web 服务部署的机器是远端

20190523_071104.png

从用户发起请求到,到IDE的整个流程图如下:
20190523_071341.png

当用户的请求参数或者cookie中不带调试信息,数据流就是浏览器到Apache(或其他web容器)到PHP,如果加上了调试参数,则请求还会由PHP转给Xdebug处理,Xdebug再把信息转发给IDE,完成调试功能。

PHP 安装 Xdebug 模块
https://xdebug.org/docs/install

https://xdebug.org/wizard.php

PHP 5.6 – Xdebug 2.5

phpize 是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块

编译 xdebug

sudo yum install php-devel
which phpize

tar xzf xdebug
/usr/bin/phpize
./configure –enable-xdebug –with-php-config=/usr/bin/php-config
make
make test
sudo make install

重启php-fpm,可以通过phpinfo()检查你的xdebug是否安装成功,也可以随便写段错误的php代码,刷新浏览器,就能看到错误提示。

service php-fpm restart

配置php.ini文件

[Xdebug]
zend_extension=”/usr/lib64/php/modules/xdebug.so”
xdebug.profiler_enable=on
xdebug.trace_output_dir=”/usr/local/php5/xdebug/“
xdebug.profiler_output_dir=”/usr/local/php5/xdebug/“
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_port=5000 //注意这里是,客户端的端口<即IDE的机器的ip,不是你的web server>
xdebug.idekey=”PHPSTORM”
xdebug.remote_autostart = 1
xdebug.remote_mode = req
xdebug.remote_connect_back = 1
xdebug.remote_log = /tmp/xdebug.log

php –version
返回信息应该看到 xdebug 的相关信息

phpstorm 配置

xdebug

php5.6 use Xdebug 2.5.5-5.6

chrome plugin
xdebug github

In the Settings/Preferences dialog (Ctrl+Alt+S), select Languages & Frameworks | PHP.

调试配置选择 php web page

mysql5

安装mysql数据库服务器 这里默认的是5.7 ,root:1qaz

sudo apt-get install mysql-server 

下面是解决问题: 1045 - Access denied for user

现在设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

登陆数据库

mysql -uroot -p
grant all on *.* to root@'%' identified by '1qaz' with grant option;
flush privileges;
exit;

重启 mysql 服务

service mysql restart
阅读全文 »

一本和金融行为心理学相关的书籍。描述了常见的行为偏差。
看了之后同样感觉像没看一样。还没有觉得有什么收获。还要继续看几遍,增加理解。

20190504_083634.png

windows 开发环境

XAMPP

Composer
Composer 是 PHP 的软件包管理系统,由 Nils Adermann 及 Jordi Boggiano 提出并实做,于 2012 年 3 月 1 日发行第一个版本

ubuntu 16.04

使用宝塔搭建环境

https://github.com/aaPanel/BaoTa

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

安装完毕后,注意访问网址换成虚拟机实际的ip地址,然后使用用户名,密码登录,提示给出的ip地址登不进去,暂时不知道为什么

2019.04.29 当前的流程

《租房租赁网签》

  1. 先到居委会登记:由工作人员会帮你核实信息,并填写《实有人口居住登记表》
  2. 办理地点 :所在小区的居委会(致电上海市民服务热线:12345,报地址可查询详细居委会地址及电话!)
  3. 所需费用 :是否收税视现场情况而定!
20190429_150809.png

所需资料

  1. 房东房产证原件复印件各一份
  2. 房产证上所有产权人身份证原件、复印件各一份
  3. 所有承租人身份证原件、复印件各一份
20190429_131122.png

网上预约

各区住房租赁服务中心受理时间(国定假日及调整公休日除外):周一至周六上午 9:00-11:00;下午13:30-16:00。服务热线:962269

  1. 登录网站
  2. 进入业务预约系统
  3. 阅读预约须知
  4. 选择业务办理地区县、办理地点、二级业务分类、三级业务分类兵阅读预约须知
  5. 填写预约信息
  6. 打印《预约通知书》
20190429_130918.png 20190429_130958.png

大厅预约服务换号

  1. 窗口人工换号
  2. 提交信息换号
  3. 换号成功等待叫号
20190429_131050.png

居住地所属区房地产交易中心: 闵行区 水清路159号
服务热线962269
产权所有人身份证原件、复印件;
租房申请人身份证原件、复印件;
办理地点:居住地所属的社区事物受理中心

《房屋租赁备案》

七宝镇社区事务受理服务中心
地址:沪松公路577号, 中春路地铁站东北走 500 米既是
受理时间:周一至周日(法定节假日除外)上午8:30-11:00,下午1:00-4:30
联系方式:021-54791001、54790101

申请/更新居住证信息

注意上面的网签合同,备案文件可能会被收回,需要拍照留念以备不时之需.

推荐使用 上海本地宝”(ID:shbendibao)官方微信公众号查询

20190429_131308.png

整型,常见细分为 tinyint、smallint、mediumint、int、bigint这几种。

建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。
所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。

COleDateTime dt;
dt.ParseDateTime(itJson["createTime"].asString().c_str());
SYSTEMTIME systime;
dt.GetAsSystemTime(systime);
CTime time = CTime(systime);
CTime ctTime = CTime::GetCurrentTime();   
CString s = ctTime.Format(_T("%Y-%m-%d %H-%M-%S"));

COleDateTime dt;
dt.ParseDateTime(itJson["createTime"].asString().c_str());
SYSTEMTIME systime;
dt.GetAsSystemTime(systime);
CTime time = CTime(systime);
CTime ctTime = CTime::GetCurrentTime();   
CString s = ctTime.Format(_T("%Y-%m-%d %H-%M-%S"));

作者 安德烈·科斯托拉尼
每次看完关于心理学的书籍之后都是感觉像没看一样。找不到重点,找不到想表达的东西。
还要继续在看几遍

20190425_221459.png

four types

类型 数据量
TinyBlob类型 最大能容纳255B的数据
Blob类型 最大能容纳65KB的
MediumBlob类型 最大能容纳16MB的数据
LongBlob类型 最大能容纳4GB的数据

blob or file? It’s a question.

less than 1MBytes use blob is OK, more than 10MBytes should be use file.
because file system does better than database,