lnmp添加fileinfo扩展

开始编译

cd /root/oneinstack/src
tar zxvf php-5.6.20.tar.gz  # 解压已经安装的php版本
cd php-5.6.20/ext/fileinfo
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
cd /usr/local/php/lib/php/extensions
ls  #看到no-debug-non-zts-20131226类似文件夹
cd no-debug-non-zts-20131226
ls  #查看有没有 fileinfo.so,如果有,证明编译成功
加载fileinfo
echo 'extension=fileinfo.so' > /usr/local/php/etc/php.d/ext-fileinfo.ini

lnmp为何没有fileinfo扩展

https://www.cnblogs.com/wamptao/p/6100534.html

endroid/qrcode php生成二维码

QR Code

By endroid

Latest Stable Version Build Status Total Downloads Monthly Downloads License Donate

This library helps you generate QR codes in a jiffy.

Installation

Use Composer to install the library.

$ composer require endroid/qrcode

Basic usage

use Endroid\QrCode\QrCode;

$qrCode = new QrCode('Life is too short to be generating QR codes');

header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();

Advanced usage

use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\LabelAlignment;
use Endroid\QrCode\QrCode;
use Symfony\Component\HttpFoundation\Response;

// Create a basic QR code
$qrCode = new QrCode('Life is too short to be generating QR codes');
$qrCode->setSize(300);

// Set advanced options
$qrCode->setWriterByName('png');
$qrCode->setMargin(10);
$qrCode->setEncoding('UTF-8');
$qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH);
$qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0]);
$qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255]);
$qrCode->setLabel('Scan the code', 16, __DIR__.'/../assets/fonts/noto_sans.otf', LabelAlignment::CENTER);
$qrCode->setLogoPath(__DIR__.'/../assets/images/symfony.png');
$qrCode->setLogoWidth(150);
$qrCode->setValidateResult(false);

// Directly output the QR code
header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();

// Save it to a file
$qrCode->writeFile(__DIR__.'/qrcode.png');

// Create a response object
$response = new Response($qrCode->writeString(), Response::HTTP_OK, ['Content-Type' => $qrCode->getContentType()]);

QR Code

Built-in validation reader

You can enable the built-in validation reader (disabled by default) by calling setValidateResult(true). This validation reader does not guarantee that the QR code will be readable by all readers but it helps you provide a minimum level of quality.

The readability of a QR code is primarily determined by the size, the input length, the error correction level and any possible logo over the image so you can tweak these parameters if you are looking for optimal results. Take note that the validator can consume quite amount of additional resources.

Symfony integration

The endroid/qrcode-bundle integrates the QR code library in Symfony for an even better experience.

  • Configure your defaults (like image size, default writer etc.)
  • Generate QR codes quickly from anywhere via the factory service
  • Generate QR codes directly by typing an URL like /qrcode/<text>.png?size=300
  • Generate QR codes or URLs directly from Twig using dedicated functions

Read the bundle documentation for more information.

Versioning

Version numbers follow the MAJOR.MINOR.PATCH scheme. Backwards compatibility breaking changes will be kept to a minimum but be aware that these can occur. Lock your dependencies for production and test your code when upgrading.

License

This bundle is under the MIT license. For the full copyright and license information please view the LICENSE file that was distributed with this source code.

Donation

If this project help you reduce time to develop, you can give me a cup of coffee 🙂

https://packagist.org/packages/endroid/qrcode

https://github.com/endroid/QrCode

 

<pre><?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;

use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\LabelAlignment;
use Endroid\QrCode\QrCode;
use Symfony\Component\HttpFoundation\Response;
/**
 *
 */
class QrcodeController extends Controller
{


    public function actionIndex()
    {
        $rgbs=[
            '0'=>['r'=>'5','g'=>'152','b'=>'71'],//绿色
            '1'=>['r'=>'0','g'=>'100','b'=>'172'],//蓝色
            '2'=>['r'=>'78','g'=>'200','b'=>'149'],//青色
            '3'=>['r'=>'15','g'=>'162','b'=>'255'],//蓝色
            '4'=>['r'=>'249','g'=>'145','b'=>'10'],//黄色
            '5'=>['r'=>'90','g'=>'175','b'=>'156'],//青色
            '6'=>['r'=>'255','g'=>'107','b'=>'149'],//粉色
            '7'=>['r'=>'7','g'=>'170','b'=>'255'],//蓝色
            '8'=>['r'=>'0','g'=>'0','b'=>'0'],//黑色
            '9'=>['r'=>'18','g'=>'219','b'=>'226'],//水蓝色
        ];
        $random_keys=array_rand($rgbs,1);
        $rgb=$rgbs[$random_keys];
        $qrCode = new QrCode('http://m.biaobai.xin');
        $qrCode->setSize(300);
        // Set advanced options
        $qrCode->setWriterByName('png');
        $qrCode->setMargin(10);
        $qrCode->setEncoding('UTF-8');
        $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH);
        $qrCode->setForegroundColor($rgb);
        $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255]);
//        $qrCode->setLabel('Scan the code', 16, __DIR__.'/../assets/fonts/noto_sans.otf', LabelAlignment::CENTER);
        $qrCode->setLogoPath(__DIR__.'/../logo.png');
        $qrCode->setLogoWidth(80);
        $qrCode->setValidateResult(false);

         // Directly output the QR code
        header('Content-Type: '.$qrCode->getContentType());
        echo $qrCode->writeString();

        // Save it to a file
        //$qrCode->writeFile(__DIR__.'/../qrcode.png');

        // Create a response object
        $response = new Response($qrCode->writeString(), Response::HTTP_OK, ['Content-Type' => $qrCode->getContentType()]);
    }

}


?></pre>

基于ThinkPHP5实现微信自动登录、微信支付、支付宝支付、Web推送、阿里云短信、极光推送、二维码生成

ThinkPHP5

基于ThinkPHP5实现微信自动登录、微信支付、支付宝支付、Web推送、阿里云短信、极光推送、二维码生成 严格按照TP5框架目录方式上传

有些功能大家可以加以修改直接做成一个公共接口,放在application的common.php中,这样在其他控制器的方法中有需要调用的时候,直接传入参数进行调用

https://github.com/SperkJJ/ThinkPHP5

ThinkPHP5-master

使用pushState()改变url而不刷新

原文链接:http://caibaojian.com/pushstate.html

编者注:这个pushState()是一个HTML5的新接口,你可能在一些科技博客如36kr上看到过,ajax加载新的文章,并且改变网址却不需要刷新页面,本站也用到了这个,当你在首页往下拉时,加载分页内容,网址也随着改变,有利于后退和增加用户体验。

HTML5 的 pushState+Ajax

HTML5提供history接口,把URL以state的形式添加或者替换到浏览器中,其实现函数正是 pushState 和 replaceState。

pushState 例子

pushState() 的基本参数是:

window.history.pushState(state, title, url);

其中state和title都可以为空,但是推荐不为空,应当创建state来配合popstate监听。·

例如,我们通过pushState现改变URL而不刷新页面。

var state = ( {

url: ~href, title: ~title, ~additionalKEY: ~additionalVALUE

} );

window.history.pushState(state, ~title, ~href);

其中带有“~”符号的是自定义内容。就可以把这个~href(URL)推送到浏览器的历史里。如果想要改变网页的标题,应该:

document.title= ~newTitle;

注意只是pushState是不能改变网页标题的哦。

Demo 演示

(实现函数onclick = history.pushState( null, null, ‘/test-string’); )。实际上这个博客在文章之间也部署了这个技术。

replaceState 同理

window.history.replaceState( state, ~title, ~href);

pushState、replaceState 的区别

pushState()可以创建历史,可以配合popstate事件,而replaceState()则是替换掉当前的URL,不会产生历史。

限制因素

只能用同域的URL替换,例如你不能用http://baidu.com去替换http://google.com。而且state对象不存储不可序列化的对象如DOM。

Ajax 配合 pushState 例子

现在用Ajax + pushState来提供全新的ajax调用风格。以jQuery为例,为了seo需要,应该为a标签的onclick添加方法。

//code from http://caibaojian.com/pushstate.html
$("~target a").click(function(evt){

evt.preventDefault(); // 阻止默认的跳转操作

var uri=$(this).attr('href');

var newTitle=ajax_Load(uri); // 你自定义的Ajax加载函数,例如它会返回newTitle

document.title=newTitle; // 分配新的页面标题

if(history.pushState){

var state=({

url: uri, title: newTitle

});

window.history.pushState(state, newTitle, uri);

}else{ window.location.href="#!"+~fakeURI; } // 如果不支持,使用旧的解决方案

return false;

});

function ajax_Load(uri){ ... return newTitle; } // 你自定义的ajax函数,例如它会返回newTitle

即可完成pushState。至于新标题newTitle的获取就是另外的问题了,例如你可以为a标签分配data-newtitle=~title属性并届时读取,或者如果你用的$.ajax()函数,可以用$(result).filter(“title”).text()来获取。

另外如果需要对新加载的页面的连接同样使用这个ajax,则需要对新内容的a标签重新部署,例如

$("~newContentTarget a").click(function(evt){ ... });

pushState 配合 popstate 监听

想要良好的支持浏览器的历史前进后退操作,应当部署popstate监听:

window.addEventListener('popstate', function(evt){

var state = evt.state;

var newTitle = ajax_Load(state.url); //你自定义的ajax加载函数,例如它会返回newTitle

document.title=newTitle;

}, false);

来源:前端开发博客

php中主要的socket函数语法和使用实例详解

在实际开发中,如果想要创建基于socket的应用程序,就需要详细了解socket的操作方法,要是像了解并熟练使用这些操作方法,就需要先了解php中的各种socket函数。在上一章节中我们详细介绍了php中的socket是什么?这里就介绍一下php中的socket函数。socket函数在php中有几十个之多,这里列举一些主要的socket函数来介绍一下。

它们的语法格式参数如下:

1. socket_create

socket_create ( int $domain , int $type , int $protocol )

此函数用于创建一个socket,它有三个参数,返回值是一个句柄(资源)。

$domain 指定创建socket时使用的通信协议族,其可选的值为:

AF_INET: 基于IPv4的Internet协议

AF_INET6:基于IPv6的Internet协议

AF_UNIX:UNIX本地通信协议

$type 指定socket通信的交互类型,其可选的值为:

SOCK_STREAM:提供序列化的、可靠的、全双工的、基于连接的字节流传输,支持TCP

SOCK_DGRAM:提供数据报式的、无连接的、固定最大长度的、自动寻址功能的传输,支持UDP

SOCK_SEQPACKET:提供序列化的、可靠的、双通道的、基于连接的数据报传输

SOCK_RAW:提供原始的网络访问协议,可手工构建特殊协议类型的套接字,支持ICMP请求(如 ping)

SOCK_RDM:提供可靠的数据报传输,无法保证顺序

$protocol 指定socket使用哪种具体的传输协议,包括ICMP、UDP、TCP,常量SOL_UDP对应UDP,常量SOL_TCP对应常量TCP。

2. socket_bind

socket_bind ( resource $socket , string $address [, int $port = 0 ] )

此函数用于将IP地址和端口绑定到socket_create创建的句柄中,有三个参数,返回布尔值。

$socket 是必选参数,代表socket_create函数创建的句柄

$address 是必选参数,代表要绑定的IP地址

$port 是可选参数,代表要绑定的端口号,指定哪个端口用来监听socket连接,当socket_create函数的第一个参数为AF_INET时,需要指定这个参数。

3. socket_listen

socket_listen ( resource $socket [, int $backlog = 0 ] )

该函数用于监听即将接入的socket连接,仅当socket的交互类型为SOCK_STREAM或SOCK_SEQPACKET时可

用,它有两个参数,返回布尔值。

$socket 是必选参数,代表socket_create函数创建的句柄(且已绑定了主机)

$backlog 是可选参数,表示队列中等候处理的(允许积压的)最大连接数。

4. socket_set_block

socket_set_block ( resource $socket )

该函数用于将socket句柄设置为阻塞模式,只有一个必选参数,返回布尔值。它可以将非阻塞模式的socket转换为阻塞模式。

当在一个阻塞模式的socket中执行某种操作(receive、send、connect、accept等)时,脚本将暂停执行,直到它收到一个信号或它完成了该操作。

$socket 是必选参数,代表一个有效的socket句柄(被socket_create或socket_accept创建的)。

说明一下阻塞模式非阻塞模式的区别:

非阻塞是指函数操作在不能立刻得到结果之前,不会阻塞当前的线程,而会立即返回。而阻塞是指干不完就不准回来,必须得到对方的回应后才能继续下一步操作。特别是当用户比较多时,设置成非阻塞是很必要的。如果是阻塞模式,若两个客户端同时连接上,服务器端在处理一个客户端请求时,另外一个客户端的请求就会被阻塞,只有等到前一个客户端的事情处理完了之后,后一个客户端的请求才会被响应。

5. socket_write

socket_write ( resource $socket , string $buffer [, int $length = 0 ] )

该函数用于向socket中写入指定大小的缓冲数据,有三个参数,返回写入的数据的字节数。

$socket 是必选参数,代表一个有效的socket句柄。

$buffer 是必选参数,指定要写入的字符串数据。

$length 是可选参数,指定轮流写入socket中的数据的字节数,如果它的值大于$buffer的字节数,它会静默地截取至$buffer的字节数长度。

6. socket_read

1
socket_read ( resource $socket , int $length [, int $type = PHP_BINARY_READ ] )

该函数用于从socket中读取指定字节长度的数据,有三个参数,返回读取的字符串数据。

$socket 是必选参数,代表一个有效的socket句柄。
$length 是必选参数,指定读取的字节长度。

$type 是可选参数,默认值为PHP_BINARY_READ,即安全读取二进制数据;另一个可选的值为PHP_NORMAL_READ,表示当遇到 \r 或 \n 时,停止读取。

7. pfsockopen

1
pfsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

该函数用于实现一个持久的socket连接,即长连接,返回一个句柄。它与 fsockopen 的区别在于,pfsockopen 建立的连接,在脚本执行完毕后,并不会断开。

8. socket_set_option

1
socket_set_option ( resource$socket , int$level , int$optname , mixed$optval )

该函数用于设置socket的控制选项,有四个参数,返回布尔值。

$socket 是必选参数,代表一个有效的socket句柄。

$level 是必选参数,指定option起作用的协议级别,一般取常量 SOL_SOCKET。

$optname 是必选参数,指定要控制的选项名称。

$optval 是必选参数,指定选项的值。

9. socket_last_error

1
socket_last_error ([ resource$socket ] )

该函数用于获取任何socket函数产生的最后错误代号,返回值为整型。

10. socket_strerror

1
socket_strerror ( int $errno )

该函数用于获取错误代号代表的错误描述,返回值为字符串。

以上所有的函数都是PHP中关于socket的,使用这些函数,你必须把你的socket打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释:

1
extension=php_sockets.dll

如果你不知道你的socket是否打开,那么你可以使用phpinfo()函数来确定socket是否打开。

下面通过创建一个服务端和客户端的例子来说明这些函数的用法:

  1. 服务器端
&lt;/div&gt;
&lt;div class="line number1 index0 alt2"&gt;&lt;code class="php plain"&gt;&lt;?php&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number2 index1 alt1"&gt;&lt;code class="php comments"&gt;//确保在连接客户端时不会超时&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number3 index2 alt2"&gt;&lt;code class="php plain"&gt;set_time_limit(0);&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number4 index3 alt1"&gt;&lt;code class="php variable"&gt;$ip&lt;/code&gt; &lt;code class="php plain"&gt;= &lt;/code&gt;&lt;code class="php string"&gt;'127.0.0.1'&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number5 index4 alt2"&gt;&lt;code class="php variable"&gt;$port&lt;/code&gt; &lt;code class="php plain"&gt;= 1935;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number6 index5 alt1"&gt;&lt;code class="php comments"&gt;/*&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number7 index6 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;+-------------------------------&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number8 index7 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket通信整个过程&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number9 index8 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;+-------------------------------&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number10 index9 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_create&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number11 index10 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_bind&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number12 index11 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_listen&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number13 index12 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_accept&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number14 index13 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_read&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number15 index14 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_write&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number16 index15 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*&nbsp;&nbsp;&nbsp; @socket_close&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number17 index16 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;+--------------------------------&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number18 index17 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;*/&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number19 index18 alt2"&gt;&lt;code class="php comments"&gt;/*----------------&nbsp;&nbsp;&nbsp; 以下操作都是手册上的&nbsp;&nbsp;&nbsp; -------------------*/&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number20 index19 alt1"&gt;&lt;code class="php keyword"&gt;if&lt;/code&gt;&lt;code class="php plain"&gt;((&lt;/code&gt;&lt;code class="php variable"&gt;$sock&lt;/code&gt; &lt;code class="php plain"&gt;= socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) &lt; 0) {&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number21 index20 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php functions"&gt;echo&lt;/code&gt; &lt;code class="php string"&gt;"socket_create() 失败的原因是:"&lt;/code&gt;&lt;code class="php plain"&gt;.socket_strerror(&lt;/code&gt;&lt;code class="php variable"&gt;$sock&lt;/code&gt;&lt;code class="php plain"&gt;).&lt;/code&gt;&lt;code class="php string"&gt;"\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number22 index21 alt1"&gt;&lt;code class="php plain"&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number23 index22 alt2"&gt;&lt;code class="php keyword"&gt;if&lt;/code&gt;&lt;code class="php plain"&gt;((&lt;/code&gt;&lt;code class="php variable"&gt;$ret&lt;/code&gt; &lt;code class="php plain"&gt;= socket_bind(&lt;/code&gt;&lt;code class="php variable"&gt;$sock&lt;/code&gt;&lt;code class="php plain"&gt;,&lt;/code&gt;&lt;code class="php variable"&gt;$ip&lt;/code&gt;&lt;code class="php plain"&gt;,&lt;/code&gt;&lt;code class="php variable"&gt;$port&lt;/code&gt;&lt;code class="php plain"&gt;)) &lt; 0) {&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number24 index23 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php functions"&gt;echo&lt;/code&gt; &lt;code class="php string"&gt;"socket_bind() 失败的原因是:"&lt;/code&gt;&lt;code class="php plain"&gt;.socket_strerror(&lt;/code&gt;&lt;code class="php variable"&gt;$ret&lt;/code&gt;&lt;code class="php plain"&gt;).&lt;/code&gt;&lt;code class="php string"&gt;"\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number25 index24 alt2"&gt;&lt;code class="php plain"&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number26 index25 alt1"&gt;&lt;code class="php keyword"&gt;if&lt;/code&gt;&lt;code class="php plain"&gt;((&lt;/code&gt;&lt;code class="php variable"&gt;$ret&lt;/code&gt; &lt;code class="php plain"&gt;= socket_listen(&lt;/code&gt;&lt;code class="php variable"&gt;$sock&lt;/code&gt;&lt;code class="php plain"&gt;,4)) &lt; 0) {&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number27 index26 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php functions"&gt;echo&lt;/code&gt; &lt;code class="php string"&gt;"socket_listen() 失败的原因是:"&lt;/code&gt;&lt;code class="php plain"&gt;.socket_strerror(&lt;/code&gt;&lt;code class="php variable"&gt;$ret&lt;/code&gt;&lt;code class="php plain"&gt;).&lt;/code&gt;&lt;code class="php string"&gt;"\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number28 index27 alt1"&gt;&lt;code class="php plain"&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number29 index28 alt2"&gt;&lt;code class="php variable"&gt;$count&lt;/code&gt; &lt;code class="php plain"&gt;= 0;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number30 index29 alt1"&gt;&lt;code class="php keyword"&gt;do&lt;/code&gt; &lt;code class="php plain"&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number31 index30 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php keyword"&gt;if&lt;/code&gt; &lt;code class="php plain"&gt;((&lt;/code&gt;&lt;code class="php variable"&gt;$msgsock&lt;/code&gt; &lt;code class="php plain"&gt;= socket_accept(&lt;/code&gt;&lt;code class="php variable"&gt;$sock&lt;/code&gt;&lt;code class="php plain"&gt;)) &lt; 0) {&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number32 index31 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php functions"&gt;echo&lt;/code&gt; &lt;code class="php string"&gt;"socket_accept() failed: reason: "&lt;/code&gt; &lt;code class="php plain"&gt;. socket_strerror(&lt;/code&gt;&lt;code class="php variable"&gt;$msgsock&lt;/code&gt;&lt;code class="php plain"&gt;) . &lt;/code&gt;&lt;code class="php string"&gt;"\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number33 index32 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php keyword"&gt;break&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number34 index33 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php plain"&gt;} &lt;/code&gt;&lt;code class="php keyword"&gt;else&lt;/code&gt; &lt;code class="php plain"&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number35 index34 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number36 index35 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;//发到客户端&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number37 index36 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php variable"&gt;$msg&lt;/code&gt; &lt;code class="php plain"&gt;=&lt;/code&gt;&lt;code class="php string"&gt;"测试成功!\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number38 index37 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php plain"&gt;socket_write(&lt;/code&gt;&lt;code class="php variable"&gt;$msgsock&lt;/code&gt;&lt;code class="php plain"&gt;, &lt;/code&gt;&lt;code class="php variable"&gt;$msg&lt;/code&gt;&lt;code class="php plain"&gt;, &lt;/code&gt;&lt;code class="php functions"&gt;strlen&lt;/code&gt;&lt;code class="php plain"&gt;(&lt;/code&gt;&lt;code class="php variable"&gt;$msg&lt;/code&gt;&lt;code class="php plain"&gt;));&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number39 index38 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number40 index39 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php functions"&gt;echo&lt;/code&gt; &lt;code class="php string"&gt;"测试成功了啊\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number41 index40 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php variable"&gt;$buf&lt;/code&gt; &lt;code class="php plain"&gt;= socket_read(&lt;/code&gt;&lt;code class="php variable"&gt;$msgsock&lt;/code&gt;&lt;code class="php plain"&gt;,8192);&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number42 index41 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number43 index42 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number44 index43 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php variable"&gt;$talkback&lt;/code&gt; &lt;code class="php plain"&gt;= &lt;/code&gt;&lt;code class="php string"&gt;"收到的信息:$buf\n"&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number45 index44 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php functions"&gt;echo&lt;/code&gt; &lt;code class="php variable"&gt;$talkback&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number46 index45 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number47 index46 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php keyword"&gt;if&lt;/code&gt;&lt;code class="php plain"&gt;(++&lt;/code&gt;&lt;code class="php variable"&gt;$count&lt;/code&gt; &lt;code class="php plain"&gt;&gt;= 5){&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number48 index47 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php keyword"&gt;break&lt;/code&gt;&lt;code class="php plain"&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number49 index48 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php plain"&gt;};&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number50 index49 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number51 index50 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number52 index51 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php plain"&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number53 index52 alt2"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php comments"&gt;//echo $buf;&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number54 index53 alt1"&gt;&lt;code class="php spaces"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/code&gt;&lt;code class="php plain"&gt;socket_close(&lt;/code&gt;&lt;code class="php variable"&gt;$msgsock&lt;/code&gt;&lt;code class="php plain"&gt;);&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number55 index54 alt2"&gt;&lt;code class="php plain"&gt;} &lt;/code&gt;&lt;code class="php keyword"&gt;while&lt;/code&gt; &lt;code class="php plain"&gt;(true);&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number56 index55 alt1"&gt;&lt;code class="php plain"&gt;socket_close(&lt;/code&gt;&lt;code class="php variable"&gt;$sock&lt;/code&gt;&lt;code class="php plain"&gt;);&lt;/code&gt;&lt;/div&gt;
&lt;div class="line number57 index56 alt2"&gt;&lt;code class="php plain"&gt;?&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div&gt;
<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$port = 1935;
$ip = "127.0.0.1";
/*
 +-------------------------------
 *    @socket连接整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_connect
 *    @socket_write
 *    @socket_read
 *    @socket_close
 +--------------------------------
 */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "OK.\n";
}
echo "试图连接 '$ip' 端口 '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
    echo "连接OK\n";
}
$in = "Ho\r\n";
$in .= "first blood\r\n";
$out = '';
if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "发送到服务器信息成功!\n";
    echo "发送的内容为:<font color='red'>$in</font> <br>";
}
while($out = socket_read($socket, 8192)) {
    echo "接收服务器回传信息成功!\n";
    echo "接受的内容为:",$out;
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
?>

如何查看已安装的CentOS版本信息

如何查看已安装的CentOS版本信息

1)[root@localhost ~]# cat /proc/version

Linux version 2.6.18-194.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Fri Apr 2 14:58:14 EDT 2010

2)

[root@localhost ~]# uname -a

Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

3)

[root@localhost ~]# uname -r

2.6.18-194.el5

2. 查看linux版本:

1) 列出所有版本信息,

[root@localhost ~]# lsb_release -a

LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: CentOS

Description:    CentOS release 5.5 (Final)

Release:        5.5

Codename:      Final

注:这个命令适用于所有的linux,包括RedHatSUSE、Debian等发行版。

2) 执行cat /etc/issue,例如如下:

[root@localhost ~]# cat /etc/issue

CentOS release 5.5 (Final)

Kernel r on an m

3) 执行cat /etc/redhat-release ,例如如下:

[root@localhost ~]# cat /etc/redhat-release

CentOS release 5.5 (Final)

查看系统是64位还是32位:

1、getconf LONG_BIT or getconf WORD_BIT

[root@localhost ~]# getconf LONG_BIT

64

2、file /bin/ls

[root@localhost ~]# file /bin/ls

/bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

3、lsb_release  -a

[root@localhost ~]# lsb_release -a

LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: CentOS

Description:    CentOS release 5.5 (Final)

Release:        5.5

Codename:      Final

4、或者是使用查看文件的方法。

vim /ect/issue

更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-12/110748.htm