liziyu 发布的文章

$.ajax({
url: "/Ajax/System/ajaxcheshi.ashx",
dataType:'text',   //  datatype: "json", 
type: "post",
data:user,//,quenceAge=quenceAge,ctertime=ctertime,tquencether=tquencether,Status=Status}
success: function (data) {
    if (data == "1") {
        alert("保存成功");
        // window.location.href = "ModelDatasequence.aspx";
        // location.href = "ModelDatasequence.aspx";
        // window.location.href="http://www.hao123.com";
        //   $this.redirect("Management/ModelDatasequence.aspx");
        setTimeout("javascript:location.href='ModelDatasequence.aspx'", 0);
    } else {
        alert("保存失败");
    }
});

解决方案 把你的 type="submit" 换成type="button"
本文转自:https://www.cnblogs.com/lzhicheng/p/8637471.html

特别是网站根目录下面出现index.php不太友好,下面修改办法:

Apache的伪静态设置,如下


Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
\#RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

windows下用记事本在网站根目录下面新建保存为.htaccess文件即可。

具体实现步骤

work-with-other-mvc-framework.png

1、网站页面建立与GatewayWorkerwebsocket连接

2、GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面

3、网站页面收到client_id后触发一个ajax请求(假设是bind.php)将client_id发到mvc后端

4、mvc后端bind.php收到client_id后利用GatewayClient调用Gateway::bindUid($client_id, $uid)client_id与当前uid(用户id或者客户端唯一标识)绑定。如果有群组、群发功能,也可以利用Gateway::joinGroup($client_id, $group_id)client_id加入到对应分组

5、页面发起的所有请求都直接post/getmvc框架统一处理,包括发送消息

6、mvc框架处理业务过程中需要向某个uid或者某个群组发送数据时,直接调用GatewayClient的接口Gateway::sendToUid Gateway::sendToGroup 等发送即可

转自:https://workerman.net/doc/gateway-worker/work-with-other-frameworks.html

总体思路

移动端推流(RTMP) ---> 流媒体服务器 ---> web服务器 ---> 网页播放

移动端推流工具使用 Larixbroadcaster ,支持安卓和苹果,并且有提供SDK,方便集成与二次开发,app商店有载,https://softvelum.com/larix
流媒体服务器的搭建使用 nginx+rtmp 方案, nginx-rtmp模块github坐标,https://github.com/arut/nginx-rtmp-module
web容器直接使用 nginxhttp://nginx.org/en/download.html
网页播放,采用 ckplayer 作为web播放器,http://www.ckplayer.com

  1. Larixbroadcaster的安装过程省略了
  2. 流媒体服务器的搭建,nginx+rtmp
    1,使用docker容器,公共仓库有大神制作好的镜像,适合测试使用,便捷快速。

Centos7环境下的安装启动脚本

#!/bin/sh
# Author: Alusss
###

##docker-compose版本,https://github.com/docker/compose/releases/查阅可用版本
dcv=1.25.1
   
###安装docker
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.nginx.bak -f
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak -f
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.bak -f
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
rm -rf /var/lib/docker
curl -sSL https://get.daocloud.io/docker | sh
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

##安装docker-compose(选装)
yum -y remove docker-compose
rm -rf /usr/local/bin/docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/$dcv/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
 
##检查版本
docker -v
docker-compose -v  

2,linux环境,下载nginx源码和nginx-rtmp-module,自行编译安装。

编译安装脚本

#!/bin/sh
# Author: Alusss
###

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.nginx-rtmp -f
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.rtmp -f
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.rtmp -f
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum install -yq tar wget gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl openssl-devel 

#设置nginx版本,rtmp版本
nginx_ver="1.16.1"
rtmp_ver="1.2.1"
dir="/usr/local/nginx"
temp="/root/nginx-rtmp"
user="root"
group="root"
args="--user=$user --group=$group --prefix=$dir --conf-path=$dir/conf/nginx.conf --pid-path=$dir/conf/nginx.pid --lock-path=$dir/lock/nginx.lock --error-log-path=$dir/log/error.log --http-log-path=$dir/log/access.log --with-http_gzip_static_module --http-client-body-temp-path=$dir/temp/client --http-proxy-temp-path=$dir/temp/proxy --http-fastcgi-temp-path=$dir/temp/fastcgi --http-uwsgi-temp-path=$dir/temp/uwsgi --http-scgi-temp-path=$dir/temp/scgi --with-http_stub_status_module --with-http_ssl_module"

mkdir $temp
cd $temp
curl -o "nginx-$nginx_ver.tar.gz" http://nginx.org/download/"nginx-$nginx_ver.tar.gz"
tar -xzf "nginx-$nginx_ver.tar.gz"
rm -f "nginx-$nginx_ver.tar.gz"
curl -o "nginx-rtmp-module-$rtmp_ver.tar.gz" https://codeload.github.com/arut/nginx-rtmp-module/tar.gz/v"$rtmp_ver"
tar xzf "nginx-rtmp-module-$rtmp_ver.tar.gz"
rm -f "nginx-rtmp-module-$rtmp_ver.tar.gz"

useradd -s /sbin/nologin $user -M
cd nginx-$nginx_ver
./configure $args --add-module="$temp/nginx-rtmp-module-$rtmp_ver"
make -j8
make install

3,Windows平台,自行编译安装,可参考:https://www.cnblogs.com/KendoCross/p/7585654.html

4,分享一个Windows平台下编译好的版本,基于nginx-1.9.6, https://pan.baidu.com/s/1ffo0ZPMtNLgii3L_lS61mA

5,贴一下rtmp部分的配置

rtmp {
    server {
        listen 1935;        
        access_log     logs/rtmp.access.log;
        application live {
            live on;
            hls on;  
            hls_path html/hls;
            hls_fragment 5s; 
            publish_notify on;
            }
        application hls {
            live on; 
            hls on;  
            hls_path temp/hls;  
            hls_fragment 5s;  
            }
        record all;
        record_unique on;
        record_path /data/rtmp/record;
        record_suffix -%Y-%m-%d-%H_%M_%S.flv;
        }
    }

*推流地址: rtmp://ip:1935/live/a
nginxhtml/hls下会生成a.m3u8文件。
通过ckplayer插件,(ckplay已经放在上面nginx里面)在http://ip/index.html页面播放。*

转自:https://www.cnblogs.com/alusss/p/12193267.html

<table>
 <strong>PHP 的魔术常量</strong>
  <thead>
   <tr>
    <th>名字</th>
    <th>说明</th>
   </tr>

  </thead>

  <tbody>
   <tr id="constant.line">
    <td>`__LINE__`</td>
    <td>
     文件中的当前行号。
    </td>
   </tr>

   <tr>
    <td>`__FILE__`</td>
    <td>
     文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
    </td>
   </tr>

   <tr>
    <td>`__DIR__`</td>
    <td>
     文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于
     <code class="literal">dirname(__FILE__)</code>。除非是根目录,否则目录中名不包括末尾的斜杠。
    </td>
   </tr>
   
   <tr>
    <td>`__FUNCTION__`</td>
    <td>
     当前函数的名称。匿名函数则为 <code class="literal">{closure}</code>。
    </td>
   </tr>

   <tr>
    <td>`__CLASS__`</td>
    <td>
     当前类的名称。类名包括其被声明的作用域(例如
     <code class="literal">Foo\Bar</code>)。当用在 trait 方法中时,__CLASS__
     是调用 trait 方法的类的名字。
    </td>
   </tr>

   <tr>
    <td>`__TRAIT__`</td>
    <td>
     Trait 的名字。Trait 名包括其被声明的作用域(例如
     <code class="literal">Foo\Bar</code>)。
    </td>
   </tr>

   <tr>
    <td>`__METHOD__`</td>
    <td>
     类的方法名。
    </td>
   </tr>

   <tr>
    <td>`__NAMESPACE__`</td>
    <td>
     当前命名空间的名称。
    </td>
   </tr>

   <tr>
    <td>`ClassName::class`</td>
    <td>
      完整的类名。
    </td>
   </tr>

  </tbody>
 
</table>

curl_close()关闭一个cURL会话。
curl_copy_handle()复制一个cURL句柄和它的所有选项。
curl_errno()返回最后一次的错误号。
curl_error()返回一个保护当前会话最近一次错误的字符串。
curl_escape()返回转义字符串,对给定的字符串进行URL编码。
curl_exec()执行一个cURL会话。
curl_file_create()创建一个CURLFile对象。
curl_getinfo()获取一个cURL连接资源句柄的信息。
curl_init()初始化一个cURL会话。
curl_multi_add_handle()向curl批处理会话中添加单独的curl句柄。
curl_multi_close()关闭一组cURL句柄。
curl_multi_exec()运行当前cURL句柄的子连接
curl_multi_getcontent()如果设置了CURLOPT_RETURNTRANSFER,

则返回获取的输出的文本流。
curl_multi_info_read()获取当前解析的cURL的相关传输信息。
curl_multi_init()返回一个新cURL批处理句柄。
curl_multi_remove_handle()移除curl批处理句柄资源中的某个句柄资源。
curl_multi_select()等待所有cURL批处理中的活动连接。
curl_multi_setopt()设置一个批处理cURL传输选项。
curl_multi_strerror()返回描述错误码的字符串文本。
curl_pause()暂停及恢复连接。
curl_reset()重置libcurl的会话句柄的所有选项。
curl_setopt_array()为cURL传输会话批量设置选项。
curl_setopt()设置一个cURL传输选项。
curl_share_close()关闭cURL共享句柄。
curl_share_init()初始化cURL共享句柄。
curl_share_setopt()设置一个共享句柄的cURL传输选项。
curl_strerror()返回错误代码的字符串描述。
curl_unescape()解码URL编码后的字符串。
curl_version()获取cURL版本信息。

key 可以是 integer 或者 string。value 可以是任意类型。

此外 key 会有如下的强制转换:

  • String 中包含有效的十进制 int,除非数字前面有一个 + 号,否则将被转换为 int 类型。例如键名 "8" 实际会被储存为 8。另外, "08" 不会被强制转换,因为它不是一个有效的十进制整数。
  • Float 也会被转换为 int ,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
  • Bool 也会被转换成 int。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
  • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
  • Array 和 object 不能 被用为键名。坚持这么做会导致警告:Illegal offset type。

如果在数组定义时多个元素都使用相同键名,那么只有最后一个会被使用,其它的元素都会被覆盖。

PHP 支持一个执行运算符:反引号(\`\`)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“\`”的效果与函数 shell_exec() 相同。

<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>

注意:
1、关闭了 shell_exec() 时反引号运算符是无效的。
2、与其它某些语言不同,反引号不能在双引号字符串中使用。