今天有个同事离职,很早以前他用php写的东西没人维护了。只能自己硬着头皮上了,万一有问题需要修修补补。
这里做点记录,方便需要看的时候回忆,反正都是基础的东西。
1.搭建环境
下载的xampp,没装mysql,本地原来有。想下个eclipse for php,结果说我没安装jdk1.8,但是我明明电脑上有,那么就放弃吧,notepad看看算了。
2.启动项目
将源码放入xampp的hotdoc文件夹,修改它的2个启动参数端口,浏览器输入能访问了。
php代码是在服务端执行完后,生成静态html返回给前端的。
3.开始看代码学习php
3.1
关于session,默认为关闭
php1.php
<?php
#include './common.inc.php';
session_start();
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
echo ($_SESSION['time']);
?>
php2.php
<?php
#include './common.inc.php';
session_start();
echo ($_SESSION['time']);
?>
用来在内存中存储一些全局变量。如1中只要执行过,2中就有数据。
3.2
if(isset($_GET['returnUrl'])){}
_GET _POST _REQUEST用来获取上个页面的对应方法传来的参数。
3.3
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting"
?>
定义常量,常量是全局的。
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest();
?>
static修饰的变量类似于java
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
global修饰的,在函数外可以访问
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
获取一些系统变量,全局的,类似echo $PATH,具体定义见:https://www.runoob.com/php/php-superglobals.html
3.4
header() 函数向客户端发送原始的 HTTP 报头。
3.5
if(NGARI_DEBUG) {
error_reporting(E_ALL);
$mtime = explode(' ', microtime());
$debug_starttime = $mtime[1] + $mtime[0];
} else {
error_reporting(0);
}
设置报告级别,错误日志可以打印
3.6
if(function_exists('set_magic_quotes_runtime')) @set_magic_quotes_runtime(0);
function_exists,意思是检查该函数是否存在,通常可能是php本身版本提供的一些函数。后面的加@是因为可以抑制错误信息输出?据说的
3.7
foreach(array('_POST', '_GET') as $__R) {
if($$__R) {
foreach($$__R as $__k => $__v) {
if(substr($__k, 0, 1) == '_') if($__R == '_POST') { unset($_POST[$__k]); } else { unset($_GET[$__k]); }
if(isset($$__k) && $$__k == $__v) unset($$__k);
}
}
}
?>
这里的=>据说是赋予__v的同时将键值赋予k。。。
3.8
dirname(__FILE__)
获取当前文件所在路径
require NGARI_ROOT.'/php/config.inc.php';
与include类似,区别在于后者每次都去读取一次内容
3.9
curl相关的函数用法,跟linux上的差不多意思。远程获取东西
<?php
$url = 'http://demo.zjmainstay.cn';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true); //返回头信息
curl_setopt($ch, CURLOPT_NOBODY, true); //不返回内容
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
$content = curl_exec($ch); //执行并存储结果
curl_close($ch);
echo $content;
?>
function Get_xxxx($url,$X_Access_Token)
{
if($url){
$ch = curl_init();
//curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
$headers = array();
$headers[] = 'Content-Type: application/json; charset=utf-8';
if($X_Access_Token) $headers[] = 'xxxx: '.$xxxx;
if($_SESSION['ClientId']) $headers[] = 'xxxx: '.$_SESSION['xxxx'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT,15); //15秒超时
$result1 = curl_exec($ch);
$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch); //关闭curl链接
}
if($httpCode==403) $result1='{"code": 403,"body": [],"msg":"xxxx"}';
if($httpCode!=403&&$httpCode!=200) $result1='{"code": 509,"body": [],"msg":"xxxx"}';
return json_decode($result1,true);
}
之前的代码http请求的一种方式。
function xmlHttp(dotype,postdata,callback){
var ajaxurl=xxxx;
$.ajax({
type: "POST", //访问WebService使用Post方式请求
contentType: "application/json",
url: ajaxurl, //调用WebService的地址和方法名称组合 ---- WsURL/方法名
data: postdata, //这里是要传递的参数,格式为 data: "{paraName:paraValue}",下面将会看到
dataType: 'json', //WebService 会返回Json类型
success:callback,
error:calllost
});
}
另外一种用ajax
3.10
关于.htaccess文件
基本上是apache提供的一个重定向功能的文件,需要配置打开,可见https://blog.csdn.net/cmzhuang/article/details/53537591
4.业务相关主要代码
每个页面的公共部分:
定义在common.inc.php中,包括
require NGARI_ROOT.'/php/config.inc.php';
require NGARI_ROOT.'/php/global.func.php';
待补充