:

请用 php 的 socket 相关知识,写出一个简易的 client

发布于:2019-3-1 10:43 作者:song100e 浏览:61 分类:面试题

请用php写出以下程序:假设网络中有一台服务器 192.168.1.101,开放端口 8899 进行侦听,请用 php 的 socket 相关知识,写出一个简易的 client,连接到 server,并发送字符串 ”hello server!”。程序仅对连接的成功和失败进行简易错误判断和处理即可。

参考代码如下:

<?php
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($sock,"192.168.1.101", 8899);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
$buf = "hello server!";
socket_write($sock,$buf,strlen($buf));
socket_close($sock);
?>

这里着重讲一下 socket_create 函数:

阅读全文>>

标签: socket

0

php-fpm 输出 php 错误日志

发布于:2019-2-28 11:25 作者:song100e 浏览:54 分类:Linux
        nginx 是一个 web 服务器,因此 nginx 的 access 日志只有对访问页面的记录,不会有 php 的 error log 信息。

        nginx 把对 php 的请求发给 php-fpm fastcgi 进程来处理,默认的 php-fpm 只会输出 php-fpm 的错误信息,在 php-fpm 的 errors log 里也看不到 php 的 errorlog。原因是 php-fpm 的配置文件 php-fpm.conf 中默认是关闭 worker 进程的错误输出,直接把他们重定向到 /dev/null,所以我们在 nginx 的 error log 和 php-fpm 的 errorlog 都看不到 php 的错误日志。

解决 nginx 下 php-fpm 不记录 php 错误日志的办法如下:

阅读全文>>

标签: php-fpm

0

GET 和 POST的区别

发布于:2019-2-28 10:41 作者:song100e 浏览:49 分类:面试题
如果有人问你 GET 和 POST 的区别,你可以轻轻松松的给出了一个“标准答案”:
    (1), GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
    (2), GET 产生的URL地址可以被 Bookmark,而 POST 不可以。
    (3), GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
    (4), GET 请求只能进行 URL 编码,而 POST 支持多种编码方式。
    (5), GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留。
    (6), GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。
    (7), 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
    (8), GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。
    (9), GET 参数通过 URL 传递,POST 放在 Request body 中。
    (本标准答案参考自 W3schools)

很遗憾,你挖的不够深!如果我告诉你 GET 和 POST 本质上没有区别你信吗? 

那么 GET 和 POST 到底是什么?HTTP 协议中的两种发送请求的方法

结束了吗?!没有。

阅读全文>>

标签: POST

0

2019年02月读书《菜根谭的智慧》

发布于:2019-2-27 9:56 作者:song100e 浏览:46 分类:人丑就要多读书

        昨天晚上从京东快递员手中拿到书,随机读了几篇, 个中意境、处世智慧,修身养性确实少有,是不可多得的好书,值得推荐。

        本书在参照各种权威版本的基础上,精心筛选出具有可靠性、时代性、契合度的经典原文。为便于阅读,编者将全书分为处世篇修持篇养身篇闲适篇,并编制了主题目录。书中详尽的“注释”和准确流畅的“译文”,更便于您去阅读和理解;独特的“解读”,意在扬弃封建糟粕,赋予时代新义,为您处理社会问题提供有益的借鉴。

       《菜根谭》这一旷古稀世的奇珍宝训,从生活的方方面面教导我们如何面对现实人生的苦难和复杂的人际关系,从而养成刚毅坚韧、与人为善、处世恬淡的健康人格,让我们能够悠闲从容地度过每一天

81dOzbviGaL.jpg

0

C语言中 .c 和 .h 文件

发布于:2019-2-26 11:00 作者:song100e 浏览:46 分类:C 语言
本质上没有任何区别。 只不过一般:.h文件是头文件,内含函数声明、宏定义、结构体定义等内容。.c文件是程序文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。你可以强制编译器把任何后缀的文件都当作c文件来编。
这样分开写成两个文件是一个良好的编程风格。

        简单的说其实要理解 C 文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:

        1.预处理阶段
        2.词法与语法分析阶段
        3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟 CPU 相关的二进制码,生成各个目标文件 (.obj文件)
        4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用 objcopy 生成纯二进制码,也就是去掉了文件格式信息。(生成 .exe 文件)

阅读全文>>

0

C 语言中 typedef struct 和 struct 的理解

发布于:2019-2-25 15:52 作者:song100e 浏览:47 分类:C 语言

举例代码:

typedef struct tagMyStruct
{ 
  int iNum;
  long lLength;
} MyStruct;

上面的 tagMyStruct 是标识符,MyStruct 是变量类型。


这段语句实际上完成两个操作
1) 定义一个新的结构类型

struct tagMyStruct
{   
  int iNum; 
  long lLength; 
};

2) typedef 为这个新的结构起了一个名字(别名),叫 MyStruct。
typedef struct tagMyStruct MyStruct;
因此,MyStruct 实际上相当于 struct tagMyStruct,我们可以使用 MyStruct varName 来定义变量。



标签: struct

0

PHP7内核学习起步!

发布于:2019-2-15 17:48 作者:song100e 浏览:74 分类:内核剖析学习

        PHP7 版本的发布,Zend 引擎被再次重写,并以 Zend Engine 3.0 的身份亮相,使得 PHP 语言的性能得到大幅度提升,大量测试显示 PHP7 比 PHP5.6 在各种开源项目中有 60% 到 200% 的性能提升。学习和研究 PHP7 内核对于提升个人使用水平和内功很有必要。

点击查看原图


一,源码下载及安装

$ wget http://php.net/distributions/php-7.0.12.tar.gz
$ tar zxvf php-7.0.12.tar.gz
$ cd php-7.0.12/
$ ./configure --prefix=/usr/local/php-7.0.12 --enable-debug --enable-fpm
$ make && sudo make install


二,目录概览

以 php-7.0.12 为例,下面是每个目录的说明。

目录 说明
TSRM 线程相关安全的实现
Zend PHP 解析器的核心实现
build linux 下编译相关的目录
ext PHP 的扩展
main PHP 的主要代码
netware 网络目录,socket 的定义与实现
pear PHP 扩展及应用的代码仓库
sapi PHP 的应用层接口
scripts Linux 下的脚本目录
tests 测试脚本目录
travis 用于构建,非 PHP 特有目录
win32 Windows 下编译 PHP 的相关脚本


三,核心目录

  1.         sapi 全称 Server API,负责 PHP 对外提供服务规范,它定义了结构体 sapi_module_struct,该结构体定义了模式启动、关闭、激活、失效等多个钩子函数指针,每个模式将这些函数指针指向自己的函数。
  2.         main 目录的作用是承接 SAPI 的请求,分析出要执行的脚本文件和参数,并对环境和配置进行初始化,比如初始化变量和常量、注册函数、解析配置文件、加载扩展等等。
  3.         Zend 目录就是大家所熟知的 Zend 引擎,是 PHP 最核心的部分,主要负责 PHP 的语法实现、内存管理及脚本的编译运行环境等,它由编译器、执行器两部分组成。编译器负责将 PHP 代码进行词法、语法分析,并生成抽象语法树,然后进一步编译为 opcode,opcode 是 Zend 虚拟机可识别的指令。
  4.         ext 是 extension 的缩写,它是扩展 PHP 内核功能的一种方式,分为 PHP 扩展 与 zend 扩展,都支持用户自定义开发,这两种都比较常见,PHP 扩展有 gd、json、date、array 等,而我们熟知的 opcache 就是 Zend 扩展。
  5.         TSRM 全称叫做 Thread Safe Resource Manager,也就是线程安全资源管理器。


标签: PHP7

0

解决 python 升级导致的 yum 问题

发布于:2019-2-14 9:26 作者:song100e 浏览:44 分类:Linux

由于 CentOS 系统自带的python版本较低,所以打算升级到最新版本3.7,升级后的yum却出现了问题。

yum_error.PNG


修改 /usr/bin/yum 的顶部python版本
!/usr/bin/python
改成了
!/usr/bin/python2.7
后,运行yum,还是出现了以下错误:
解决方案:

yum_python2.PNG

1. vim /usr/libexec/urlgrabber-ext-down
将/usr/bin/python 改为 /usr/bin/python2.7。

2. vim /usr/bin/yum-config-manager
解决办法同上: #!/usr/bin/python 换成 #!/usr/bin/python2.7

标签: python3

0

设置 ssh 超时时间

发布于:2019-2-12 13:55 作者:song100e 浏览:66 分类:Linux
1.修改 server 端的 etc/ssh/sshd_config
ClientAliveInterval 60 #server 每隔60秒发送一次请求给client,然后client响应,从而保持连接。
ClientAliveCountMax 999 #server 发出请求后,客户端没有响应得次数达到 999,就自动断开连接,正常情况下,client 不会不响应。

2.修改 client 端的 etc/ssh/ssh_config 添加以下:(在没有权限改server配置的情形下,一般用这个

vim /etc/ssh/ssh_config

ServerAliveInterval 60 #client 每隔60秒发送一次请求给server,然后server响应,从而保持连接。
ServerAliveCountMax 999  #client 发出请求后,服务器端没有响应得次数达到 999,就自动断开连接,正常情况下,server 不会不响应。

标签: ssh

0

2019年02月读书《程序员的英语》

发布于:2019-2-11 16:02 作者:song100e 浏览:214 分类:人丑就要多读书
五种常用句式

句式1 为〈主语+ 动词〉,是基本句式。此处的“动词”指完全不及物动词(字典中常标注为vi.),后面不接宾语。
    He made toward the central station. 他向中央站走去。

句式2 为〈主语+ 动词+ 补语〉。此处的“动词”指不完全不及 物动词,补语可以为名词和形容词。补语为名词时,补充说明主语; 补语为形容词时,表示主语的状态。

    He will make a good programmer. 他将成为一名优秀的程序员。

47305.jpg

阅读全文>>

0

1 2 3 4 5 6 7 ... »