非docker方式部署php后台
内网67宿主机(Ubuntu 18.04):
add-apt-repository -y ppa:ondrej/php
apt install php5.6
svn checkout http://192.168.31.20/svn/DTHero/mcGM --username hxh
apt install php5.6-bcmath php5.6-bz2 php5.6-curl php5.6-dba php5.6-dom php5.6-enchant php5.6-gd php5.6-gmp php5.6-imap php5.6-intl php5.6-ldap php5.6-mbstring php5.6-mcrypt php5.6-mongo php5.6-mysql php5.6-odbc php5.6-sqlite php5.6-pspell php5.6-simplexml  php5.6-snmp php5.6-soap php5.6-tidy php5.6-xsl php5.6-zip
看情况执行:
apt-get install libapache2-mod-php5.6
ln -s /etc/apache2/mods-available/php5.6.load /etc/apache2/mods-enabled/php5.6.load
ln -s /etc/apache2/mods-available/php5.6.conf /etc/apache2/mods-enabled/php5.6.conf
/etc/init.d/apache2 restart
安装不上,但不影响:
apt-get install libapache2-mod-php5
必须执行的:
a2enmod rewrite
/etc/init.d/apache2 restart
验证:
http://192.168.31.67:8090/2.php?areanum=201&dbtype=1
http://192.168.31.67:8090/3.php?areanum=201&dbtype=1
 
http://192.168.31.69:8090/2.php?areanum=201&dbtype=1
http://192.168.31.69:8090/3.php?areanum=201&dbtype=1
<?php
if (isset($_GET['areanum']) && (isset($_GET['dbtype']))) {
$db = new mysqli('127.0.0.1', 'root', '123456', 'game_manager');
if ($db->connect_errno) {
echo "链接失败<br>";
} else {
echo "连接成功<br>";
$areanum = $_GET['areanum'];
$dbtype = $_GET['dbtype'];
$query = "SELECT id,dbip from server_mapping WHERE areanum=" . $areanum . " AND dbtype =" . $dbtype;
$result = $db->query($query);
if ($result) {
if ($result->num_rows) {
echo "成功<hr>";
} else {
echo "失败<hr>";
}
} else {
var_dump($db->error_list); // Returns a list of errors from the last command executed
}
$db->close();
}
}

<?php
if (isset($_GET['areanum']) && (isset($_GET['dbtype']))) {
$conn=mysql_connect("127.0.0.1","root","123456");
if(null == $conn) {
echo "链接失败<br>";
} else {
echo "连接成功<br>";
mysql_select_db("game_manager");
$areanum = $_GET['areanum'];
$dbtype = $_GET['dbtype'];
$query = "SELECT id,dbip from server_mapping WHERE areanum=" . $areanum . " AND dbtype =" . $dbtype;
$result=mysql_query($query);
echo "id dbip<br>";
while ($row=mysql_fetch_assoc($result))
{
  $arr[]=$row;
  echo $row[id]." ".$row[dbip]."<br>";
}
echo count($arr)."条记录<br>";
if ($result) { 
$total = mysql_num_rows($result); 
echo "成功返回".$total."条记录!<hr>";
} else {
echo "失败<hr>";
}
mysql_close();
}
}
?>

$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过POST和GET方法提交的所有数据都可以通过$_REQUEST数组获得

2010-2013年的一个php MVC框架,不是thinkphp,作者是FastAdmin框架的开发者Karson
https://www.awaimai.com/128.html
'5.6.40-12+ubuntu18.04.1+deb.sury.org+1' (length=38)
echo PHP_VERSION;
var_dump(PHP_VERSION);

index.php 项目入口文件
D:\phpGM\system>tree /f
├─framework
│      base.php 框架基础辅助函数库
│      framework.php 框架核心类
├─helpers 辅助函数库
│      city.php 腾讯城市辅助函数
│      common.php 公用辅助函数
│      excel.php Excel读取函数
│      function.php 辅助函数
│      ip.php 根据IP获取真实地址
│      pinyin.php 拼音转换辅助函数
│      url.php url函数脚本库
├─libraries 类库
│      apns.php IOS消息推送类
│      cache.php 缓存类(使用文件式缓存或apc cache)
│      captcha.php 验证码类
│      chrome.php 控制台输出
│      configvalue.php
│      controller.php 控制器基类
│      cookie.php COOKIE类
│      database.php 数据库类
│      email.php EMAIL类
│      error.php 错误类
│      form.php 表单元素处理类
│      formula.php
│      highcharts.php
│      hooks.php 钩子类
│      image.php 图片处理类
│      input.php 输入类
│      load.php 加载类
│      model.php 模型基类
│      page.php 分页类
│      rsa.php RSA签名
│      session.php SESSION类
│      split.php 分词类
│      template.php 模板类
│      upload.php 上传类
│      uri.php URI类
│      view.php 视图基类
│      vip.php
├─models 模型
│      common.php
D:\phpGM\application>tree /f
├─configs 配置
│      autoload.php 自动加载配置
│      config.php
│      constant.php 常量配置
│      db.php 数据库配置
│      highcharts.php
│      inc.php
│      upload.ini ftp服务器和db服务器地址

chap2 PHP环境搭建和开发工具
组合包,就是将Apache、PHP、MySQL等服务器软件和工具安装配置完成后打包处理。
这里推荐3种组合包:EasyPHP、AppServ和XAMPP。
chap3 PHP语言基础
3.1 PHP标记风格
XML风格
<?php 
    echo "Hello PHP<br/>";
    phpinfo();
?>
脚本风格
简单风格
ASP风格
推荐使用XML风格的标记。
3.2
PHP支持3种风格的程序注释。
C++风格的单行注释
C风格的多行注释
Shell风格的注释
3.3
PHP一共支持8种原始类型,包括4种标量类型,即
boolean
$register_res = true;
美元符号$是变量的标识符,所有变量都是以$符号开头的,无论是声明变量还是调用变量,都应使用$符号。
integer
float/double
string
2种复合类型,即
array
object
2种特殊类型,即
resource
null

chap5 字符串操作
双引号字符串中的内容可以被解释并替换,而单引号字符串中的内容则只能被作为普通字符进行处理。
在进行SQL查询之前,所有字符串都必须加单引号,以避免可能的注入漏洞和SQL错误。
5.3字符串的连接符
半角句号.是字符串连接符,可以把两个或两个以上的字符串连接成一个字符串。
5.4字符串操作
trim函数用于去除字符串首尾空格和特殊字符,并返回去掉空格和特殊字符后的字符串。
ltrim函数用于去除字符串左边的空格和特殊字符。
rtrim函数用于去除字符串左边的空格和特殊字符。
addslashes函数用来为字符串加入反斜线\
stripslashes函数用来将使用addslashes函数转义后的字符串返回原样
所有数据在插入数据库之前,有必须应用addslashes函数进行字符串转义,以免特殊字符未经转义而在插入数据库时出现错误。
addcslashes函数实现转义字符串中的字符
stripcslashes函数用来将应用addcslashes函数转义后的字符串还原
strlen函数用于获取指定字符串的长度
substr函数截取指定字符串中指定长度的字符
strcmp函数用来对两个字符串按字节进行比较,区分大小写
strcasecmp函数用来对两个字符串按字节进行比较,不区分大小写
strnatcmp函数按自然排序法进行字符串的比较,区分大小写
strnatcasecmp函数按自然排序法进行字符串的比较,不区分大小写
strncmp函数指定从源字符串的位置开始比较
strstr函数查找指定的关键字,区分大小写
strchr函数是从字符串后序的位置开始检索子串的
substr_count函数检索子串出现的次数
str_ireplace函数使用新的字符串(子串)替换原始字符串中被指定要替换的字符串,不区分大小写
str_replace函数区分大小写
substr_replace函数对指定字符串中的部分字符串进行替换
number_format函数用来将数字字符串格式化
explode函数分割字符串
implode函数合成字符串

chap7 PHP数组
数组是一组有序的变量,其中每个变量被称为一个元素。每个元素由一个特殊的标识符来区分,这个标识符称为键(也称为下标)。数组中的每个元素都包含两项:键和值。可以通过键值来获取相应数组元素,这些键可以是数值键或关联键。
如果说变量是存储单个值的容器,那么数组就是存储多个值的容器。
7.2声明数组
一种是应用array函数声明数组,另一种是直接通过为数组元素赋值的方式声明数组。
应用array函数声明数组时,数组下标既可以是数字索引也可以是关联索引。下标与数组元素值之间用=>进行连接,不通数组元素之间用逗号进行分割。
7.3数组的类型
PHP支持两种数组:数字索引数组和关联数组,前者使用数字作为键,后者使用字符串作为键。
7.4输出数组
通过print_r函数可以将数组结构进行输出。
7.6遍历数组
使用foreach结构遍历数组并非操作数组本身,而是操作数组的一个备份。
使用list函数遍历数组,仅能用于数字索引且索引值从0开始的数组。
7.7字符串与数组的转换
使用explode函数将字符串转换成数组
使用implode函数将数组转换成一个新字符串
7.8统计数组元素个数
使用count函数对数组中的元素个数进行统计
7.9查询数组中指定元素
array_search函数在数组中搜索给定的值,找到后返回键名,否则返回false。
7.10获取数组中最后一个元素
array_pop函数获取并返回数组的最后一个元素,并将数组的长度减1,如果数组为空(或者不是数组)将返回null。
7.11向数组中添加元素
array_push函数将数组当成一个栈,将传入的变量压入该数组的末尾,该数组的长度将随着入栈变量数目的增加而增加,返回数组新的单元总数。
7.12删除数组中重复元素
array_unique函数将数组元素的值作为字符串排序,然后对每个值只保留第一个键名,忽略所有后面的键名,即删除数组中重复的元素。

chap8 PHP与Web页面交互
8.1表单
使用<form>标记
name 表单的名称
method 设置表单的提交方式,GET或者POST方法
action 指向处理该表单页面的URL
enctype 设置表单内容的编码方式
<form action="" method="POST" id="rowForm" name="rowForm">
</form>
<form action="" method="POST" id="rowForm" enctype="multipart/form-data">
</form>
<form name="myform" id="myform" action="<?= site_url('index/login'); ?>" method="POST">
</form>
表单由表单元素组成。常用的表单元素有以下几种标记:输入域标记<input>、选择域标记<select>和<option>、文字域标记<textarea>等。
常用的输入域标记有文本框、按钮、单选按钮、复选框等。
文本框type="text"
<input type="text" name="row[timesec]" id="timesec" size="10" />
密码域type="password"
<input type="password" name="row[userpwd]" id="userpwd" size="64" value="<?=$row['userpwd'] ?>" />
文件域type="file"
<input name="upload_file" type="file" size="50" /></td>
图像域type="image"
<input name="tiwen" type="image" id="tiwen" src="<?= $config['images_url'] ?>/buglist/subbutton.png" alt="提问"  />
单选按钮type="radio"
<input type="radio" name="row[enable]" value="0" id="send2all" size="0" /> <?= translate('SEND_2_ALL') ?>
复选框type="checkbox"
<input type="checkbox" name="row[area][]" value="<?=$key ?>"><?=$value ?>
提交按钮type="submit"
<input type="submit" value="<?= translate('SUBMIT') ?>" id="submit"/>
重置按钮
type="reset"
<input type="reset" value="<?= translate('RESET') ?>" id="reset"/>
普通按钮type="button"
<intput type="button" value="下载" />
隐藏域type="hidden"
<input type="hidden" name="url" value="<?= $url ?>" />
时间日期type="datetime"
<input type="datetime" name="row[starttime]" id="starttime" value="<?= $starttime ?>"></input>
选择域标记<select>和<option>
列表方式
                  <select name="row[area]" id="area">
                   <?php foreach ($areaList as $key=>$value) { ?>
                    <option value="<?=$key ?>"><?=$value["name"] ?></option>
                    <?php } ?>
                  </select>
参数multiple表示以菜单方式显示数据,默认以列表方式显示数据。
文字域标记<textarea>用来建立多行的文字域,可以在其中输入更多的文本。
<textarea name="row[role_id]" id="roleid" cols="100" rows="11"></textarea>
8.2在普通的Web页中插入表单
静态页可以保存为.html格式
8.3获取表单数据的两种方法
8.4 PHP参数传递的常用方法
$rowdata = $_POST['row']
使用PHP的$_POST[]预定义变量可以获取表单元素的值
在某些PHP版本中直接写$row即可调用表单元素的值,这和php.ini的设置有关系,register_globals=ON就可以直接写成$row,register_globals=OFF就不可以。
PHP使用$_GET[]全局变量就可以获取通过GET方法传过来的表单元素的值。
$this->areanum = $_SESSION ['area_selected_id'];
使用$_SESSION[]变量可以获取表单元素的值。
8.5在Web页中嵌入PHP脚本
8.5.1在HTML标记中添加PHP脚本
8.5.2对表单元素的value属性进行赋值
8.6在PHP中获取表单数据
8.7对URL传递的参数进行编/解码
urlencode函数实现对字符串进行URL编码
urldecode函数可将URL编码后的字符串进行解码

chap10 日期和时间
时区设置
date_default_timezone_set("PRC");
mktime函数将一个时间转换成UNIX的时间戳。
time()函数获取当前的UNIX时间戳。
date函数获取当前的日期和时间。
$rowdata['addtime'] = date("Y-m-d H-i-s", time());
$getrow["updatetime"] = date("Y-m-d H:i:s", time());
$date = date("y-m-d", $time);
$tmp_date = date("Y-m-d 0:0:0", $start_time);
getdate函数返回数组形式的日期和时间信息。
$v_date = getdate($p_header['mtime']);
checkdate函数检验日期的有效性
setlocale函数可以改变PHP默认的本地化环境
strftime函数根据本地化环境来格式化输出日期和时间
strtotime函数将日期和时间解析为UNIX时间戳

chap11 Cookie与Session
创建Cookie
在PHP中通过setcookie函数创建Cookie。
读取Cookie
$_COOKIE[]
删除Cookie
setcookie函数中的第二个参数设置为空值,第三个参数失效时间设置为小于系统的当前时间即可。
session_start();
创建会话
启动会话
session_start();
session_register('captcha');
注册会话
$_SESSION[$name] = '';
$_SESSION[$name] = $data;
使用会话
if (!empty($_SESSION['area_selected_id']))
删除会话
unset($_SESSION[$name]);
session_destroy();

chap14 面向对象
class ActivityCfg
    function updateStartTime($area_id, $start_time, $ipaddress = "", $robotgrow = false) {
    }
构造方法是生成对象时自动执行的成员方法,作用就是初始化对象。该方法可以没有参数,也可以有多个参数。
    function __construct() {
    }
函数中的__是两条下划线_
$act_cfg = new ActivityCfg();
$act_cfg->updateStartTime($one['id'], time(), $one['host'], true);
析构方法的作用和构造方法正好相反,是对象被销毁时被调用的,作用是释放内存。
    public function __destruct() {
        if (is_resource($this->smtpConnect))
            fclose($this->smtpConnect);
    }
PHP使用的是一种垃圾回收机制。一般情况下是不需要手动创建析构与方法的。
继承是通过关键字Extends来声明的,Controller为父类名称。
class Excelfile_Controller Extends Controller {
class GroupMail_Controller Extends Controller {
class Sendlog_Controller Extends Controller {
class SingleMail_Controller Extends Controller {
$this->只可以在类的内部使用
$className = get_class($reader);返回$reader的类名
get_class函数返回对象所属类的名字,如果不是对象,则返回false
被final修饰过的类和方法就是最终的版本。
public final function __clone() {
 
throw new PHPExcel_Exception("Cloning a Singleton is not allowed!");
}
该方法在子类中不可以进行重写,也不可以被覆盖。
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类至少要包含一个抽象方法。
abstract class PHPExcel_CachedObjectStorage_CacheBase {
abstract class PHPExcel_Reader_Abstract implements PHPExcel_Reader_IReader
abstract class PHPExcel_Style_Supervisor
abstract class PHPExcel_Writer_Abstract implements PHPExcel_Writer_IWriter
abstract class PHPExcel_Writer_Excel2007_WriterPart
abstract class PHPExcel_Writer_PDF_Core extends PHPExcel_Writer_HTML
PHP只支持单继承。如果想实现多继承,就要使用接口。PHP可以实现多个接口。
interface PHPExcel_IComparable
interface PHPExcel_CachedObjectStorage_ICache
interface PHPExcel_Cell_IValueBinder
interface PHPExcel_Reader_IReader
interface PHPExcel_Reader_IReadFilter
interface PHPExcel_RichText_ITextElement
interface PHPExcel_Writer_IWriter
子类是通过implements关键字来实现接口的。
__clone方法的作用是:在克隆对象的过程中,调用方法,可以使克隆出来的对象保持自己的一些方法及属性。
对象比较
2个等号==是比较两个对象的内容,3个等号===是比较对象的引用地址。
instanceof操作符可以检测当前对象是属于哪个类。
PHP中有很多以两个下划线开头的方法,这些方法被称为魔术方法。
function __call($name, $args) {
 
throw new Exception("未找到请求的模型方法[{$name}],参数[" . implode(',', $args) . "]");
}
public function __toString() {
return $this->_text->getPlainText();
}

chap16 MySQL数据库基础
chap18 PHP操作MySQL数据库
mysql_connect函数连接MySQL服务器
mysql_pconnect函数建立持续连接
mysql_select_db函数选择MySQL数据库
mysql_query函数执行MySQL语句
mysql_query函数中执行的SQL语句不应以分号;结尾
mysql_query("SET NAMES 'utf8'");设置数据库的编码格式,可以避免在输出中文字符串时出现乱码。
mysql_unbuffered_query函数
mysql_free_result函数关闭结果集
mysql_close函数关闭与MySQL服务器的连接
mysql_fetch_array函数从数组结果集中获取信息,返回的字段名区分大小写
mysql_fetch_object函数从结果集中获取一行作为对象,返回的字段名区分大小写
mysql_fetch_row函数逐行获取结果集中的每条记录,返回的字段名区分大小写
mysql_num_rows函数获取查询结果集中的记录数
mysql_affected_rows函数获取由insert、update、delete语句所影响到的数据行数

chap19 PDO数据库抽象层
PDO是PHP数据对象的简称。
有了PDO,用户不必再使用mysql_*函数、oci_*函数、mssql_*函数,也不必再将它们封装到数据库操作类。

chap23 PHP与Ajax技术
Ajax是一个客户端技术,即异步JavaScript和XML技术,它可以实现客户端的异步请求操作
chap1 ThinkPHP入门
1.2 ThinkPHP是什么
轻量级的PHP开发框架,它创建于2006年初,遵循Apache2开源协议发布。
1.3 搭建PHP开发环境
目前网上提供的Windows下PHP的集成环境有AppServ、phpStudy、WAMP和UPUPW等,这些软件都是集成了PHP、MySQL、Apache。本书主要以UPUPW为例,介绍集成环境的安装和配置。
chap3 路由
从SEO(搜索引擎优化)的角度来说,URL有动态URL、静态URL、伪静态三种,三种模式各有优点和缺点。
伪静态URL本质是动态页面,它充分结合了静态页面和动态页面的优点,解决了静态页面占用较大磁盘空间的问题,也能较好应付搜索引擎。CPU占有量会上升,当访问量过大的时候容易导致网站崩溃。
3.2.1路由模式
ThinkPHP的路由支持以下四种模式:
普通模式:动态URL
pathinfo模式:伪静态,有index.php
rewrite模式:伪静态,没有index.php
兼容模式:动态URL
3.2.2路由配置
要使用ThinkPHP的路由功能,只要Web服务器支持除普通模式外的任何一种模式即可,前提是在公共(或模块)配置文件中启用路由功能。
Application/Common/Conf/config.php
'URL_ROUTER_ON'=>true
使用URL_ROUTER_RULES参数配置路由规则,配置格式为数组,一个元素就是一个路由规则
Application/Home/Conf/config.php
ThinkPHP的路由规则采用顺序遍历方式进行,只要成功匹配一条匹配的路由,则终止继续匹配。
路由表达式支持规则路由、正则路由、静态路由。
静态路由不包含任何动态参数,也不需要遍历路由规则,静态路由采用URL_MAP_RULES进行定义。
4.4伪静态
伪静态通常是为了优化SEO效果,ThinkPHP支持伪静态设置,通过配置URL_HTML_SUFFIX可以在URL的最后添加你想要的静态后缀。
如果需要禁止特定后缀的访问,配置URL_DENY_SUFFIX即可。
URL_DENY_SUFFIX优先级高于URL_HTML_SUFFIX。
不经过ThinkPHP框架处理的请求,URL_DENY_SUFFIX不会生效。
URL_CASE_INSENSITIVE配置为true即可实现URL不区分大小写,保持Windows和Linux环境的一致体验。
 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐