当前位置: 首页 > news >正文

mysql charset=utf-8_mysql数据库charset=utf-8

关于

mysql数据库charset=utf-8的搜索结果

回答

按照下面几个措施,保证MySQL的输入输出没有乱码:1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)2 MySQL数据库charset=utf-83 Python连接MySQL是加上参数 charset=utf84 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)Python代码:

蛮大人123

2019-12-02 01:45:26

0 浏览量

回答数 0

回答

MySQL 的官方文档中可以查的到。下面是一般用到的参数:# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径

# -DMYSQL_DATADIR=/usr/local/mysql/data \ #数据文件存放位置

# -DSYSCONFDIR=/etc \ #my.cnf路径

# -DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持MyIASM引擎

# -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #支持InnoDB引擎

# -DWITH_MEMORY_STORAGE_ENGINE=1 \ #支持Memory引擎

# -DWITH_READLINE=1 \ #快捷键功能(我没用过)

# -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ #连接数据库socket路径

# -DMYSQL_TCP_PORT=3306 \ #端口

# -DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据

# -DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装支持数据库分区

# -DEXTRA_CHARSETS=all \ #安装所有的字符集

# -DDEFAULT_CHARSET=utf8 \ #默认字符

蛮大人123

2019-12-02 01:43:12

0 浏览量

回答数 0

回答

参考官方文档http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html一般用到的参数# -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装路径

# -DMYSQL_DATADIR=/usr/local/mysql/data \ #数据文件存放位置

# -DSYSCONFDIR=/etc \ #my.cnf路径

# -DWITH_MYISAM_STORAGE_ENGINE=1 \ #支持MyIASM引擎

# -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #支持InnoDB引擎

# -DWITH_MEMORY_STORAGE_ENGINE=1 \ #支持Memory引擎

# -DWITH_READLINE=1 \ #快捷键功能(我没用过)

# -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \ #连接数据库socket路径

# -DMYSQL_TCP_PORT=3306 \ #端口

# -DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据

# -DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装支持数据库分区

# -DEXTRA_CHARSETS=all \ #安装所有的字符集

# -DDEFAULT_CHARSET=utf8 \ #默认字符

西秦说云

2019-12-02 01:33:19

0 浏览量

回答数 0

ff0c35e3aa0877a25f7873cca08f3438.png

Quick BI 数据可视化分析平台

2020年入选全球Gartner ABI魔力象限,为中国首个且唯一入选BI产品

回答

if (function_exists('mysql_set_charset') === false) {

mysql_query("SET NAMES 'utf8'", $con);

}else{

mysql_set_charset('utf8', $con);

}

$con 对应 mysql_connect 函数的返回值, 上面的 utf8 改为你数据库的编码(上面的代码放在你执行mysql_query("select * from hpsubject")之前.

然后在你的php文件头部增加一行header('Content-Type: application/json; charset=utf-8'); 其中这里的 utf-8 也改为你数据库中所使用的编码.

爵霸

2019-12-02 01:57:55

0 浏览量

回答数 0

回答

仅供参考

header("Content-Type:text/html;charset=utf-8");

require_once 'excel_reader2.php';

set_time_limit(20000);

ini_set("memory_limit","2000M");

//使用pdo连接数据库

$dsn = "mysql:host=localhost;dbname=alumni;";

$user = "root";

$password = "";

try{

$dbh = new PDO($dsn,$user,$password);

$dbh->query('set names utf8;');

}catch(PDOException $e){

echo "连接失败".$e->getMessage();

}

//pdo绑定参数操作

$stmt = $dbh->prepare("insert into alumni(gid,student_no,name) values (:gid,:student_no,:name) ");

$stmt->bindParam(":gid", $gid,PDO::PARAM_STR);

$stmt->bindParam(":student_no", $student_no,PDO::PARAM_STR);

$stmt->bindParam(":name", $name,PDO::PARAM_STR);

//使用php-excel-reader读取excel内容

$data = new Spreadsheet_Excel_Reader();

$data->setOutputEncoding('UTF-8');

$data->read("stu.xls");

for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {

for ($j = 1; $j <= 3; $j++) {

$student_no = $data->sheets[0]['cells'][$i][1];

$name = $data->sheets[0]['cells'][$i][2];

$gid = $data->sheets[0]['cells'][$i][3];

}

//将获取的excel内容插入到数据库

$stmt->execute();

}

echo "执行成功";

echo "最后插入的ID:".$dbh->lastInsertId();

?>

小旋风柴进

2019-12-02 02:00:16

0 浏览量

回答数 0

回答

使用你要调用的数据库的配置,重新实例化一个数据库对象,然后操作该对象即可。$db = new Typecho_Db('Mysql', 'cdb_');

$db->addServer(array(

'host' => $dzHost,

'user' => $dzUser,

'password' => $dzPassword,

'charset' => 'utf8',

'port' => $dzPort,

'database' => $dzDatabase

), Typecho_Db::READ);

$members = $db->fetchAll($db->select()->from('table.members'));

西秦说云

2019-12-02 01:33:15

0 浏览量

回答数 0

问题

Java Web中数据从前端输入到插入数据库哪些地方需要考虑字符编码?

目前考虑到的有三个地方需要设置字符编码:JSP页面:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">JDBC获取连接时:DriverManag...

蛮大人123

2019-12-01 20:03:47

1286 浏览量

回答数 3

问题

php写的提交数据代码没提示错误 但是数据库添加不进去,怎么回事?

php写的一个简单提交数据代码没提示错误 但是数据库添加不进去index.php代码如下:

<?php

require_once 'conn.php';

$id = $_POST[userid];

$name...

小旋风柴进

2019-12-01 20:10:14

1281 浏览量

回答数 1

回答

步骤如下:1、准备服务器管理节点(MGM) 192.168.0.10(db1)SQL节点1(SQL1) 192.168.0.20(db2)SQL节点2(SQL2) 192.168.0.30(db3)数据节点1(NDBD1) 192.168.0.40(db4)数据节点2(NDBD2) 192.168.0.50(db5)如果只想配置在两台服务器上可以将db1,db2,db4放在同一台服务器上,db3,db5放在同一服务器上。2、下载mysql-cluster-gpl-7.0.8a-win32.msi。分别安装在准备好的服务器上。3、在db1中创建C:mysqlmysql-cluster,并且在mysql-cluster文件夹中创建一个名为config.ini的文件,config.ini的内容如下:`[NDBD DEFAULT]NoOfReplicas=2[MYSQLD DEFAULT][NDB_MGMD DEFAULT][TCP DEFAULT]`# Managment Server`[NDB_MGMD]HostName=192.168.0.10 #管理节点服务器db1的IP地址`# Storage Engines `[NDBD]HostName=192.168.0.10 #MySQL集群db1的IP地址DataDir= E:data #如果不存在就创建一个[NDBD]HostName=192.168.0.30 #MySQL集群db3的IP地址DataDir= E:data #如果不存在就创建一个[MYSQLD]HostName=192.168.0.10[MYSQLD]HostName=192.168.0.30`4、在第2步安装的mysql根目录下,一般是(D:Program FilesMySQLMySQL Server 7.0)这样的结构。在其中找到my.ini,在最后加入如下内容。ndbclusterndb-connectstring=192.168.0.10[mysql_cluster]ndb-connectstring=192.168.0.10 #db1的IP地址5、使用"D:Program FilesMySQLMySQL Server 7.0binndb_mgmd.exe" - f "C:mysqlmysql-clusterconfig.ini"启动管理节点服务器。6、使用"D:Program FilesMySQLMySQL Server 7.0binndbd.exe" --initial分别启动节点服务。7、启动mysql数据库服务。8、使用"D:Program FilesMySQLMySQL Server 7.0binndb_mgm.exe"检查配置是否成功。可以使用quit或者bye退出程序。9、在db1上使用mysql -uroot -pxxxxxxx testcreate table city(id mediumint unsigned not null auto_increment primary key,name varchar(20) not null default ''engine = ndbcluster default charset utf8;insert into city values(1, 'city1');insert into city values(2, 'city2');在db3上使用mysql -uroot -pxxxxxxx test

mysql> select * from city;

id

name

1

city1

2

city2

最关键的是要使用ndbcluster 作为表的存储引擎。10、使用"D:Program FilesMySQLMySQL Server 7.0binndb_mgm.exe" -e shutdown停止集群。否则可能不会将全部数据写到磁盘。

落地花开啦

2019-12-02 01:49:43

0 浏览量

回答数 0

问题

请教有关php+mysql乱码的问题

因为服务器提供商的原因只能通过phpMyadmin管理数据库。使用show variables语句查询得到的当前数据库的信息如下:

character_set_client latin1

character_set_connection u...

落地花开啦

2019-12-01 19:51:49

1288 浏览量

回答数 1

问题

SpringMVC使用注解解析json总是报415错误

用HTML访问这个总是报415错, 这是Spring 配置文件

<?xml version="1.0" encoding="UTF-8"?>

xmlns:xsi="http://www.w3.org/2001/XMLSchem...

杨冬芳

2019-12-01 20:19:45

1327 浏览量

回答数 0

回答

php 上传图片保存到数据库例子

php 上传图片,一般都使用move_uploaded_file方法保存在服务器上。但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外)如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间。

首先图片文件是二进制数据,所以需要把二进制数据保存在MySQL数据库。mysql数据库提供了BLOB类型用于存储大量数据,BLOB是一个二进制对象,能容纳不同大小的数据。

BLOB类型有以下四种,除存储的最大信息量不同外,其他都是一样的。可根据需要使用不同的类型。TinyBlob 最大 255BBlob 最大 65KMediumBlob 最大 16MLongBlob 最大 4G

数据表photo,用于保存图片数据,结构如下:

[sql] view plain copy 在CODE上查看代码片派生到我的代码片

CREATE TABLE `photo` (

`id` int(10) unsigned NOT NULL auto_increment,

`type` varchar(100) NOT NULL,

`binarydata` mediumblob NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

upload_image_todb.php

[php] view plain copy 在CODE上查看代码片派生到我的代码片

// 连接数据库

$conn=@mysql_connect("localhost","root","") or die(mysql_error());

@mysql_select_db('demo',$conn) or die(mysql_error());

// 判断action

$action = isset($_REQUEST['action'])? $_REQUEST['action'] : '';

// 上传图片

if($action=='add'){

$image = mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));

$type = $_FILES['photo']['type'];

$sqlstr = "insert into photo(type,binarydata) values('".$type."','".$image."')";

@mysql_query($sqlstr) or die(mysql_error());

header('location:upload_image_todb.php');

exit();

// 显示图片

}elseif($action=='show'){

$id = isset($_GET['id'])? intval($_GET['id']) : 0;

$sqlstr = "select * from photo where id=$id";

$query = mysql_query($sqlstr) or die(mysql_error());

$thread = mysql_fetch_assoc($query);

if($thread){

header('content-type:'.$thread['type']);

echo $thread['binarydata'];

exit();

}

}else{

// 显示图片列表及上传表单

?>

upload image to db demo

图片:

$sqlstr = "select * from photo order by id desc";

$query = mysql_query($sqlstr) or die(mysql_error());

$result = array();

while($thread=mysql_fetch_assoc($query)){

$result[] = $thread;

}

foreach($result as $val){

echo '

upload_image_todb.php?action=show&id='.%24val%5B'id'%5D.'&t='.time().'

';

}

?>

}

?>

小旋风柴进

2019-12-02 01:59:44

0 浏览量

回答数 0

回答

按照你的说法,既然数据库是同一个,浏览器也是同一个,代码也肯定是同一个了,那么基本上问题出在php上,1.查看你的php配置的默认编码是否是utf-8,最好拿phpinfo()看一下default_charset = "utf-8";2.查看你的数据库连接抽象层,在php与MySQL交互的地方,是否设定了编码规则,如果你用的mysqli最起码要这样设定一下$mysqli->set_charset("utf8")

蛮大人123

2019-12-02 01:44:59

0 浏览量

回答数 0

问题

数据库读取数据 输出数组 转为json输出

header('Content-type: application/json;charset=utf-8');

require 'conn.php';

//读取数据

$sql_notice = mysql_query('SELECT id,...

杨冬芳

2019-12-01 20:18:01

1011 浏览量

回答数 1

回答

不建议你轻易尝试上面提到的方法。SET NAMES 'utf8'不是设置mysql的字符集,而是连接校对的字符集。这表示你当前连接使用的客户端的数据的编码方式(对浏览器来说就是charset=uft-8),和php程序的源码格式、mysql的数据库编码格式完全无关。比如说你的网页是gbk编码的,那么通过你的网页提交的数据存入mysql的时候应该指明SET NAMES 'GBK'。连接校对的作用:是为了保持客户端与mysql之间数据编码的一致性。事实上连接校对字符集指定错误不会影响客户端自己,但是会影响第三方。例客户端1内容是GBK编码,连接校对是 utf-8,mysql使用的字符集是latin-1,那么会先按照utf-8解码,然后再用latin-1编码,保存。对于客户端1来说,读数据就是该过程的反向,数据不出会出现异常。然而客户端2内容是utf-8编码,连接校对是utf-8,此时它在读取客户端1写入的数据后就乱码了,同样客户端1读取客户端2写入的内容也是乱码的。但是他们读取自己写入的内容则都没有问题。而是用mysql命令行则会发现,客户端1写入的数据由于编码异常显示为乱码,而客户端2写入的数据是正常的。

落地花开啦

2019-12-02 01:41:32

0 浏览量

回答数 0

回答

1、Python语言编写工具

最好选用Spyder(我的版本是3.6,与2.7版本有一定区别),因为内部已经集成了很多工具包,可以直接“ import 工具包”进行使用;

对于内部没有的工具包,下载安装也非常简单,步骤如下:

1)打开控制台,Tools-Open command prompt;

2)下载安装工具包,在控制台界面输入:pip install 工具包名称;

3)安装完成后,采用“ import 工具包”进行使用。

2、Python 连接Mysql,步骤如下:

1)导入工具包:import pymysql

2)编写数据库连接信息,代码如下:

conn= pymysql.Connect(

host='localhost', #写IP信息,可以右击Mysql所连的数据库,查看“连接信息”,可以看到,一般本机Mysql写主机 名“localhost”,非本机Mysql写IP地址

port = 3306, #写端口信息,可以右击Mysql所连的数据库,查看“连接信息”,可以看到端口

user='root', #写用户名信息,可以右击Mysql所连的数据库,查看“连接信息”,可以看到用户名

passwd='***', #写数据库密码,即你连接数据库时所输入的密码

db ='mysql', #写数据库名称,即你想操作的表所在的数据库名称

charset='utf8' #写编码方式,默认为utf8

)

3)测试数据库是否连接成功

cur = conn.cursor()

print('ok')

运行以上语句,若能在控制台打印出"ok",则证明连接数据库成功。

4)执行sql语句

sql = "select * from 表名称"

cur.execute(sql1)

result= cur.fetchall()

运行以上语句,可从Variable explorer 窗口查看查询结果“result”中的数据。

元芳啊

2019-12-02 01:04:43

0 浏览量

回答数 0

问题

PHP+MYSQL,我登陆之后,点击“注销”,为何会显示“非法访问”?

代码:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=...

小旋风柴进

2019-12-01 20:10:51

1015 浏览量

回答数 1

回答

PHP面试干货

1、进程和线程

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

2、apache默认使用进程管理还是线程管理?如何判断并设置最大连接数?

一个进程可以开多个线程 默认是进程管理 默认有一个主进程

Linux: ps -aux | grep httpd | more 一个子进程代表一个用户的连接

Conf/extra/httpd-mpm.conf 多路功能模块 http -l 查询当前apache处于什么模式下

3、单例模式

单例模式需求:只能实例化产生一个对象

如何实现:

私有化构造函数

禁止克隆对象

提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一对象

需要一个保存类的静态属性

class demo {

private static $MyObject; //保存对象的静态属性

private function __construct(){ //私有化构造函数

}

private function __clone(){ //禁止克隆

}

public static function getInstance(){

if(! (self::$MyObject instanceof self)){

self::$MyObject = new self;

}

return self::$MyObject;

}

}

4、安装完Apache后,在http.conf中配置加载PHP文件以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module "e:/php/php5apache2.dll"动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php 使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理

5、debug_backtrace()函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的

function one($str1, $str2)

{

two("Glenn", "Quagmire");

}

function two($str1, $str2)

{

three("Cleveland", "Brown");

}

function three($str1, $str2)

{

print_r(debug_backtrace());

}

one("Peter", "Griffin");

Array

(

[0] => Array

(

[file] => D:\www\test\result.php

[line] => 9

[function] => three

[args] => Array

(

[0] => Cleveland

[1] => Brown

)

)

[1] => Array

(

[file] => D:\www\test\result.php

[line] => 5

[function] => two

[args] => Array

(

[0] => Glenn

[1] => Quagmire

)

)

[2] => Array

(

[file] => D:\www\test\result.php

[line] => 16

[function] => one

[args] => Array

(

[0] => Peter

[1] => Griffin

)

)

)

6、输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间

echo $ip=getenv('REMOTE_ADDR');

$ip=str_replace('.','',$ip);

if($ip<1921681150 && $ip>1921681100)

{

echo 'ip在192.168.1.100—–192.168.1.150之间';

}

else

{

echo 'ip不在192.168.1.100—–192.168.1.150之间';

}

7、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值

$tarray = array(

array('id' => 0, 'name' => '123'),

array('id' => 0, 'name' => '1234'),

array('id' => 0, 'name' => '1235'),

array('id' => 0, 'name' => '12356'),

array('id' => 0, 'name' => '123abc')

);

foreach($tarray as $key=>$val)

{

$c[]=$val['name'];

}

function aa($a,$b)

{

if(strlen($a)==strlen($b)) return 0;

return strlen($a)>strlen($b)?-1:1;

}

usort($c,'aa');

$len=count($c);

for($i=0;$i

{

$t[$i]['id']=$i+1;

$t[$i]['name']=$c[$i];

}

print_r($t);

8、表单数据提交方式POST和GET的区别,URL地址传递的数据最大长度是多少?

POST方式提交数据用户不可见,是数据更安全,最大长度不受限制,而GET方式传值在URL地址可以看到,相对不安全,对大长度是2048字节。

9、SESSION和COOKIE的作用和区别,SESSION信息的存储方式,如何进行遍历

SESSION和COOKIE都能够使值在页面之间进行传递,SESSION存储在服务器端,数据更安全,COOKIE保存在客户端,用户使用手段可以进行修改,SESSION依赖于COOKIE进行传递的。Session遍历使用$_SESSION[]取值,cookie遍历使用$_COOKIE[]取值。

10、什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么

索引用来快速地寻找那些具有特定值的记录。

主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。

索引的缺点:

1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。

3、当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

11、数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案

瓶颈主要有:

1、磁盘搜索 优化方法是:将数据分布在多个磁盘上

2、磁盘读/写 优化方法是:从多个磁盘并行读写。

3、CPU周期 优化方法:扩充内存

4、内存带宽

12、include和require区别

include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

13、文件上传时设计到点

和文件上传有关的php.ini配置选项(File Uploads):

file_uploads=On/Off:文件是否允许上传

upload_max_filesize上传文件时,单个文件的最大大小

post_max_size:提交表单时,整个post表单的最大大小

max_file_uploads =20上传文件的个数

内存占用,脚本最大执行时间也间接影响到文件的上传

14、header常见状态

//200 正常状态

header('HTTP/1.1 200 OK');

// 301 永久重定向,记得在后面要加重定向地址 Location:$url

header('HTTP/1.1 301 Moved Permanently');

// 重定向,其实就是302 暂时重定向

header('Location: http://www.maiyoule.com/');

// 设置页面304 没有修改

header('HTTP/1.1 304 Not Modified');

// 显示登录框,

header('HTTP/1.1 401 Unauthorized');

header('WWW-Authenticate: Basic realm="登录信息"');

echo '显示的信息!';

// 403 禁止访问

header('HTTP/1.1 403 Forbidden');

// 404 错误

header('HTTP/1.1 404 Not Found');

// 500 服务器错误

header('HTTP/1.1 500 Internal Server Error');

// 3秒后重定向指定地址(也就是刷新到新页面与

header('Content-Transfer-Encoding: binary');

readfile('example.zip');//读取文件到客户端

//禁用页面缓存

header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

header('Pragma: no-cache');

//设置页面头信息

header('Content-Type: text/html; charset=iso-8859-1');

header('Content-Type: text/html; charset=utf-8');

header('Content-Type: text/plain');

header('Content-Type: image/jpeg');

header('Content-Type: application/zip');

header('Content-Type: application/pdf');

header('Content-Type: audio/mpeg');

header('Content-Type: application/x-shockwave-flash');

//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富

15、ORM和ActiveRecord

ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库

ActiveRecord也属于ORM层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。

ActiveRecord的主要思想是:

1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field;

2. ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;;

3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑;

ActiveRecord比较适用于:

1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的,即你的业务逻辑大多数是对单表操作;

2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script),把跨表事务提升到事务脚本中;

3. ActiveRecord最大优点是简单, 直观。 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了;

这些优点使ActiveRecord特别适合WEB快速开发。

16、斐波那契方法,也就是1 1 2 3 5 8 ……,这里给出两种方法,大家可以对比下,看看哪种快,以及为什么

function fibonacci($n){

if($n == 0){

return 0;

}

if($n == 1){

return 1;

}

return fibonacci($n-1)+fibonacci($n-2);

}

function fibonacci($n){

for($i=0; $i

$r[] = $i<2 ? 1 : $r[$i-1]+$r[$i-2];

}

return $r[--$i];

}

17、约瑟夫环,也就是常见的数猴子,n只猴子围成一圈,每只猴子下面标了编号,从1开始数起,数到m那么第m只猴子便退出,依次类推,每数到m,那么那个位置的猴子退出,那么最后剩下的猴子下的编号是啥。

function yuesefu($n,$m) {

$r=0;

for($i=2; $i<=$n; $i++) {

$r=($r+$m)%$i;

}

return $r+1;

}

18、冒泡排序,大致是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束

function bubbleSort($arr){

for($i=0, $len=count($arr); $i

for($j=0; $j

if($arr[$i]

$tmp = $arr[$j];

$arr[$j] = $arr[$i];

$arr[$i] = $tmp;

}

}

}

return $arr;

}

19、快速排序,也就是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

function quickSort($arr){

$len = count($arr);

if($len <=1){

return $arr;

}

$key = $arr[0];

$leftArr = $rightArr= array();

for($i=1; $i

if($arr[$i] <= $key){

$leftArr[] = $arr[$i];

} else{

$rightArr[] = $arr[$i];

}

}

$leftArr = quickSort($leftArr);

$rightArr = quickSort($rightArr);

return array_merge($leftArr, array($key), $rightArr);

}

20、(递归的)列出目录下所有文件及目录,这里也有两种方法

function listDir($path){

$res = dir($path);

while($file = $res->read()){

if($file == '.' || $file == '..'){

continue;

}

if(is_dir($path . '/' .$file)){

echo $path . '/' .$file . "\r\n";

listDir($path . '/' .$file);

} else{

echo $path . '/' .$file . "\r\n";

}

}

$res->close();

}

function listDir($path){

if(is_dir($path)){

if(FALSE !== ($res = opendir($path))){

while(FALSE !== ($file = readdir($res))){

if($file == '.' || $file == '..'){

continue;

}

$subPath = $path . '/' . $file;

if(is_dir($subPath)){

echo $subPath . "\r\n";

listDir($subPath);

} else{

echo $subPath . "\r\n";

}

}

}

}

}

21、找出相对的目录,比如/a/b/c/d/e.php相对于/a/b/13/34/c.php是/c/d/

function ralativePath($a, $b){

$a = explode('/', dirname($a));

$b = explode('/', dirname($b));

$c = '/';

foreach ($a as $k=> $v){

if($v != $b[$k]){

$c .= $v . '/';

}

}

echo $c;

}

22、快速找出url中php后缀

function get_ext($url){

$data = parse_url($url);

return pathinfo($data['path'], PATHINFO_EXTENSION);

}

23、正则题,使用正则抓取网页,以网页meta为utf8为准,若是抓取的网页编码为big5之类的,需要转化为utf8再收录

function preg_meta($meta){

$replacement = "\\1utf8\\6\\7";

$pattern = '#()#i';

return preg_replace($pattern, $replacement, $meta);

}

echo preg_meta("");

24、不用php的反转函数倒序输出字符串,如abc,反序输出cba

function revstring($str){

for($i=strlen($str)-1; $i>=0; $i--){

echo $str{$i};

}

}

revstring('abc');

25、常见端口

TCP 21端口:FTP 文件传输服务

SSH 22端口:SSH连接linux服务器,通过SSH连接可以远程管理Linux等设备

TCP 23端口:TELNET 终端仿真服务

TCP 25端口:SMTP 简单邮件传输服务

UDP 53端口:DNS 域名解析服务

TCP 80端口:HTTP 超文本传输服务

TCP 110端口:POP3 “邮局协议版本3”使用的端口

TCP 443端口:HTTPS 加密的超文本传输服务

TCP 1521端口:Oracle数据库服务

TCP 1863端口:MSN Messenger的文件传输功能所使用的端口

TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口

TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口

UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口

TCP 5000端口:MS SQL Server使用的端口

UDP 8000端口:腾讯QQ

26、linux常用的命令

top linux进程实时监控

ps 在Linux中是查看进程的命令。ps查看正处于Running的进程

mv 为文件或目录改名或将文件由一个目录移入另一个目录中。

find 查找文件

df 可显示所有文件系统对i节点和磁盘块的使用情况。

cat 打印文件类容

chmod 变更文件或目录的权限

chgrp 文件或目录的权限的掌控以拥有者及所诉群组来管理。可以使用chgrp指令取变更文件与目录所属群组

grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。

wc 为统计指定文件中的字节数、字数、行数,并将统计结果显示输出

27、对于大流量的网站,您采用什么样的方法来解决访问量问题

首先,确认服务器硬件是否足够支持当前的流量

其次,优化数据库访问。

第三,禁止外部的盗链。

第四,控制大文件的下载。

第五,使用不同主机分流主要流量

第六,使用流量分析统计软件

28、$_SERVER常用的字段

$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名

$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称

$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”

$_SERVER['QUERY_STRING'] #查询(query)的字符串

$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容

$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址

$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址

$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名

$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名

$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用

$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”

29、安装php扩展

进入扩展的目录

phpize命令得到configure文件

./configure --with-php-config=/usr/local/php/bin/php-config

make & make install

在php.ini中加入扩展名称.so

重启web服务器(nginx/apache)

30、php-fpm与nginx

PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。

FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求

#fastcgi

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

Nginx+FastCGI运行原理

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

31、ajax全称“Asynchronous Javascript And XML”(异步JavaScript和XML)

小川游鱼

2019-12-02 01:41:29

0 浏览量

回答数 0

回答

PHP面试干货

1、进程和线程

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

2、apache默认使用进程管理还是线程管理?如何判断并设置最大连接数?

一个进程可以开多个线程 默认是进程管理 默认有一个主进程

Linux: ps -aux | grep httpd | more 一个子进程代表一个用户的连接

Conf/extra/httpd-mpm.conf 多路功能模块 http -l 查询当前apache处于什么模式下

3、单例模式

单例模式需求:只能实例化产生一个对象

如何实现:

私有化构造函数

禁止克隆对象

提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一对象

需要一个保存类的静态属性

class demo {

private static $MyObject; //保存对象的静态属性

private function __construct(){ //私有化构造函数

}

private function __clone(){ //禁止克隆

}

public static function getInstance(){

if(! (self::$MyObject instanceof self)){

self::$MyObject = new self;

}

return self::$MyObject;

}

}

4、安装完Apache后,在http.conf中配置加载PHP文件以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module "e:/php/php5apache2.dll"动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php 使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理

5、debug_backtrace()函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的

function one($str1, $str2)

{

two("Glenn", "Quagmire");

}

function two($str1, $str2)

{

three("Cleveland", "Brown");

}

function three($str1, $str2)

{

print_r(debug_backtrace());

}

one("Peter", "Griffin");

Array

(

[0] => Array

(

[file] => D:\www\test\result.php

[line] => 9

[function] => three

[args] => Array

(

[0] => Cleveland

[1] => Brown

)

)

[1] => Array

(

[file] => D:\www\test\result.php

[line] => 5

[function] => two

[args] => Array

(

[0] => Glenn

[1] => Quagmire

)

)

[2] => Array

(

[file] => D:\www\test\result.php

[line] => 16

[function] => one

[args] => Array

(

[0] => Peter

[1] => Griffin

)

)

)

6、输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间

echo $ip=getenv('REMOTE_ADDR');

$ip=str_replace('.','',$ip);

if($ip<1921681150 && $ip>1921681100)

{

echo 'ip在192.168.1.100—–192.168.1.150之间';

}

else

{

echo 'ip不在192.168.1.100—–192.168.1.150之间';

}

7、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值

$tarray = array(

array('id' => 0, 'name' => '123'),

array('id' => 0, 'name' => '1234'),

array('id' => 0, 'name' => '1235'),

array('id' => 0, 'name' => '12356'),

array('id' => 0, 'name' => '123abc')

);

foreach($tarray as $key=>$val)

{

$c[]=$val['name'];

}

function aa($a,$b)

{

if(strlen($a)==strlen($b)) return 0;

return strlen($a)>strlen($b)?-1:1;

}

usort($c,'aa');

$len=count($c);

for($i=0;$i

{

$t[$i]['id']=$i+1;

$t[$i]['name']=$c[$i];

}

print_r($t);

8、表单数据提交方式POST和GET的区别,URL地址传递的数据最大长度是多少?

POST方式提交数据用户不可见,是数据更安全,最大长度不受限制,而GET方式传值在URL地址可以看到,相对不安全,对大长度是2048字节。

9、SESSION和COOKIE的作用和区别,SESSION信息的存储方式,如何进行遍历

SESSION和COOKIE都能够使值在页面之间进行传递,SESSION存储在服务器端,数据更安全,COOKIE保存在客户端,用户使用手段可以进行修改,SESSION依赖于COOKIE进行传递的。Session遍历使用$_SESSION[]取值,cookie遍历使用$_COOKIE[]取值。

10、什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么

索引用来快速地寻找那些具有特定值的记录。

主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。

索引的缺点:

1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。

3、当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

11、数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案

瓶颈主要有:

1、磁盘搜索 优化方法是:将数据分布在多个磁盘上

2、磁盘读/写 优化方法是:从多个磁盘并行读写。

3、CPU周期 优化方法:扩充内存

4、内存带宽

12、include和require区别

include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

13、文件上传时设计到点

和文件上传有关的php.ini配置选项(File Uploads):

file_uploads=On/Off:文件是否允许上传

upload_max_filesize上传文件时,单个文件的最大大小

post_max_size:提交表单时,整个post表单的最大大小

max_file_uploads =20上传文件的个数

内存占用,脚本最大执行时间也间接影响到文件的上传

14、header常见状态

//200 正常状态

header('HTTP/1.1 200 OK');

// 301 永久重定向,记得在后面要加重定向地址 Location:$url

header('HTTP/1.1 301 Moved Permanently');

// 重定向,其实就是302 暂时重定向

header('Location: http://www.maiyoule.com/');

// 设置页面304 没有修改

header('HTTP/1.1 304 Not Modified');

// 显示登录框,

header('HTTP/1.1 401 Unauthorized');

header('WWW-Authenticate: Basic realm="登录信息"');

echo '显示的信息!';

// 403 禁止访问

header('HTTP/1.1 403 Forbidden');

// 404 错误

header('HTTP/1.1 404 Not Found');

// 500 服务器错误

header('HTTP/1.1 500 Internal Server Error');

// 3秒后重定向指定地址(也就是刷新到新页面与

header('Content-Transfer-Encoding: binary');

readfile('example.zip');//读取文件到客户端

//禁用页面缓存

header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

header('Pragma: no-cache');

//设置页面头信息

header('Content-Type: text/html; charset=iso-8859-1');

header('Content-Type: text/html; charset=utf-8');

header('Content-Type: text/plain');

header('Content-Type: image/jpeg');

header('Content-Type: application/zip');

header('Content-Type: application/pdf');

header('Content-Type: audio/mpeg');

header('Content-Type: application/x-shockwave-flash');

//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富

15、ORM和ActiveRecord

ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库

ActiveRecord也属于ORM层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。

ActiveRecord的主要思想是:

1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field;

2. ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;;

3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑;

ActiveRecord比较适用于:

1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的,即你的业务逻辑大多数是对单表操作;

2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script),把跨表事务提升到事务脚本中;

3. ActiveRecord最大优点是简单, 直观。 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了;

这些优点使ActiveRecord特别适合WEB快速开发。

16、斐波那契方法,也就是1 1 2 3 5 8 ……,这里给出两种方法,大家可以对比下,看看哪种快,以及为什么

function fibonacci($n){

if($n == 0){

return 0;

}

if($n == 1){

return 1;

}

return fibonacci($n-1)+fibonacci($n-2);

}

function fibonacci($n){

for($i=0; $i

$r[] = $i<2 ? 1 : $r[$i-1]+$r[$i-2];

}

return $r[--$i];

}

17、约瑟夫环,也就是常见的数猴子,n只猴子围成一圈,每只猴子下面标了编号,从1开始数起,数到m那么第m只猴子便退出,依次类推,每数到m,那么那个位置的猴子退出,那么最后剩下的猴子下的编号是啥。

function yuesefu($n,$m) {

$r=0;

for($i=2; $i<=$n; $i++) {

$r=($r+$m)%$i;

}

return $r+1;

}

18、冒泡排序,大致是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束

function bubbleSort($arr){

for($i=0, $len=count($arr); $i

for($j=0; $j

if($arr[$i]

$tmp = $arr[$j];

$arr[$j] = $arr[$i];

$arr[$i] = $tmp;

}

}

}

return $arr;

}

19、快速排序,也就是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

function quickSort($arr){

$len = count($arr);

if($len <=1){

return $arr;

}

$key = $arr[0];

$leftArr = $rightArr= array();

for($i=1; $i

if($arr[$i] <= $key){

$leftArr[] = $arr[$i];

} else{

$rightArr[] = $arr[$i];

}

}

$leftArr = quickSort($leftArr);

$rightArr = quickSort($rightArr);

return array_merge($leftArr, array($key), $rightArr);

}

20、(递归的)列出目录下所有文件及目录,这里也有两种方法

function listDir($path){

$res = dir($path);

while($file = $res->read()){

if($file == '.' || $file == '..'){

continue;

}

if(is_dir($path . '/' .$file)){

echo $path . '/' .$file . "\r\n";

listDir($path . '/' .$file);

} else{

echo $path . '/' .$file . "\r\n";

}

}

$res->close();

}

function listDir($path){

if(is_dir($path)){

if(FALSE !== ($res = opendir($path))){

while(FALSE !== ($file = readdir($res))){

if($file == '.' || $file == '..'){

continue;

}

$subPath = $path . '/' . $file;

if(is_dir($subPath)){

echo $subPath . "\r\n";

listDir($subPath);

} else{

echo $subPath . "\r\n";

}

}

}

}

}

21、找出相对的目录,比如/a/b/c/d/e.php相对于/a/b/13/34/c.php是/c/d/

function ralativePath($a, $b){

$a = explode('/', dirname($a));

$b = explode('/', dirname($b));

$c = '/';

foreach ($a as $k=> $v){

if($v != $b[$k]){

$c .= $v . '/';

}

}

echo $c;

}

22、快速找出url中php后缀

function get_ext($url){

$data = parse_url($url);

return pathinfo($data['path'], PATHINFO_EXTENSION);

}

23、正则题,使用正则抓取网页,以网页meta为utf8为准,若是抓取的网页编码为big5之类的,需要转化为utf8再收录

function preg_meta($meta){

$replacement = "\\1utf8\\6\\7";

$pattern = '#()#i';

return preg_replace($pattern, $replacement, $meta);

}

echo preg_meta("");

24、不用php的反转函数倒序输出字符串,如abc,反序输出cba

function revstring($str){

for($i=strlen($str)-1; $i>=0; $i--){

echo $str{$i};

}

}

revstring('abc');

25、常见端口

TCP 21端口:FTP 文件传输服务

SSH 22端口:SSH连接linux服务器,通过SSH连接可以远程管理Linux等设备

TCP 23端口:TELNET 终端仿真服务

TCP 25端口:SMTP 简单邮件传输服务

UDP 53端口:DNS 域名解析服务

TCP 80端口:HTTP 超文本传输服务

TCP 110端口:POP3 “邮局协议版本3”使用的端口

TCP 443端口:HTTPS 加密的超文本传输服务

TCP 1521端口:Oracle数据库服务

TCP 1863端口:MSN Messenger的文件传输功能所使用的端口

TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口

TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口

UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口

TCP 5000端口:MS SQL Server使用的端口

UDP 8000端口:腾讯QQ

26、linux常用的命令

top linux进程实时监控

ps 在Linux中是查看进程的命令。ps查看正处于Running的进程

mv 为文件或目录改名或将文件由一个目录移入另一个目录中。

find 查找文件

df 可显示所有文件系统对i节点和磁盘块的使用情况。

cat 打印文件类容

chmod 变更文件或目录的权限

chgrp 文件或目录的权限的掌控以拥有者及所诉群组来管理。可以使用chgrp指令取变更文件与目录所属群组

grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。

wc 为统计指定文件中的字节数、字数、行数,并将统计结果显示输出

27、对于大流量的网站,您采用什么样的方法来解决访问量问题

首先,确认服务器硬件是否足够支持当前的流量

其次,优化数据库访问。

第三,禁止外部的盗链。

第四,控制大文件的下载。

第五,使用不同主机分流主要流量

第六,使用流量分析统计软件

28、$_SERVER常用的字段

$_SERVER['PHP_SELF'] #当前正在执行脚本的文件名

$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称

$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”

$_SERVER['QUERY_STRING'] #查询(query)的字符串

$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容

$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址

$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址

$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名

$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名

$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用

$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”

29、安装php扩展

进入扩展的目录

phpize命令得到configure文件

./configure --with-php-config=/usr/local/php/bin/php-config

make & make install

在php.ini中加入扩展名称.so

重启web服务器(nginx/apache)

30、php-fpm与nginx

PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。

FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求

#fastcgi

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

Nginx+FastCGI运行原理

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

31、ajax全称“Asynchronous Javascript And XML”(异步JavaScript和XML)

小川游鱼

2019-12-02 01:41:29

0 浏览量

回答数 0

问题

怎样使用中文显示,解决Django的编码格式问题

在使用MySQL数据库存储中文时遇到了编码方式的问题,解决的过程很麻烦,我用的这样的方法:1.创建数据库时使用 create database XXX default character set utf8;来设置数据库的编码格式 2.在pr...

落地花开啦

2019-12-01 19:46:26

2525 浏览量

回答数 1

问题

PHP中,为何当3个输入框都是空的时候,我点击提交,依然会往数据库写一行(都是空的)???

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8...

小旋风柴进

2019-12-01 20:10:49

1149 浏览量

回答数 1

问题

PHP如何将MYSQL中SELECT出来的结果存入到已有数组中?

流程有些复杂,需要按照JSON格式输出一串字符串,格式如下:

{

"list_info": [

{

"order_id": "1",

"order_status": "0",

"order_c...

蛮大人123

2019-12-01 19:48:14

2286 浏览量

回答数 1

问题

PHP+AJAX交互判断用户名是否存在

html代码输入框:<input type="text" class="form-control" name="username" id="username" placeholder="请输入用户名" required autofoc...

小旋风柴进

2019-12-01 19:29:19

1074 浏览量

回答数 1

回答

建议数据库用utf8编码 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码. 5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. 6.PHP页面字符集不正确. 7.PHP连接MYSQL数据库语句指定的编码不正确. 使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难了. 针对不同问题的解决方法: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令: ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改表的编码: ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将一个表category的编码改为utf8. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改字段的编码: ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL 以上命令就是将test表中 dd的字段编码改为utf8. 4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码. 如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可. 5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. 这种情况也是修改页面charset即可. 6.PHP页面字符集不正确. 为了避免PHP页面乱码的发生,PHP页面开始第一句 header("content-type:text/html; charset=utf-8"); //强行指定页面的编码,以避免乱码 7.PHP连接MYSQL数据库语句指定的编码不正确. 在连接数据库的语句中. mysql_connect('localhost','user','password'); mysql_select_db('my_db'); mysql_query("set names utf8;"); //或写为 mysql_query("SET CHARACTER SET utf8");

小旋风柴进

2019-12-02 02:01:21

0 浏览量

回答数 0

问题

PHP报错Notice: Undefined variable的问题

Notice: Undefined variable: rs in /home/sujata/Public/guestbook4/edit.php on line 44 (48,52,56)

44行:

小旋风柴进

2019-12-01 20:09:27

1410 浏览量

回答数 1

问题

同样的代码保存成CSV时正常但写入Mysql数据库时错误

用scrpay写爬虫用大众点评练手,同样的代码-o保存成CSV时一切正常,但同时写入Mysql数据库时很多数据重复且不齐全。csv文件一切正常。Mysql里面的数据库一塌糊涂。同一段代码,完全没有头绪,请高手帮忙。

class MySQLS...

蛮大人123

2019-12-01 19:52:49

1224 浏览量

回答数 1

相关文章:

  • nodejs mysql 断线重连_nodejs中mysql断线重连
  • mac mysql.tar.gz_mac 安装 mysql.tar.gz
  • debian 编译mysql源码_debian 下编译mysql源码出错【求助】
  • python linspace函数_c语言中的python linspace++
  • 因为左侧和右侧的元素数目不同。_求数组中第K大的元素
  • mysql查询优化非索引_mysql 查询优化和索引使用心得
  • mysql ab复制延时_MySQL AB复制详述
  • Java将MySQL数据写入json_Java实现将json中的数值插入到mysql中
  • mysql部署模型_proxysql-单主模型MGR部署
  • python 报表打印预览_python学习笔记之wxpython打印预览
  • python动态规划算法最大k乘积_动态规划最大K乘积问题
  • python实现语音播放失败_PyAudio alsa错误消息
  • python更新pip管理员权限_PIP升级权限被拒绝Windows 10
  • redis监听mysql数据库数据_天兔监控服务器和mysql,redis等监控
  • 第二部分 Mysql数据库管理_第二篇 数据库MySql
  • 【译】理解JavaScript:new 关键字
  • Docker: 容器互访的三种方式
  • Docker下部署自己的LNMP工作环境
  • es6--symbol
  • ES学习笔记(12)--Symbol
  • IndexedDB
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Lucene解析 - 基本概念
  • php面试题 汇集2
  • Sass Day-01
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Yeoman_Bower_Grunt
  • 从setTimeout-setInterval看JS线程
  • 记录:CentOS7.2配置LNMP环境记录
  • 记一次和乔布斯合作最难忘的经历
  • 面试遇到的一些题
  • 驱动程序原理
  • 树莓派 - 使用须知
  • 正则学习笔记
  • AI算硅基生命吗,为什么?
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #include
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (办公)springboot配置aop处理请求.
  • (二十四)Flask之flask-session组件
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (十一)图像的罗伯特梯度锐化
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (译)2019年前端性能优化清单 — 下篇
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Sublime Text3配置Lua运行环境
  • (转)我也是一只IT小小鸟
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET MVC之AOP
  • .net MySql
  • .NET 中的轻量级线程安全
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)