脚本php 怎么运行,如何在网页端调用服务器端的程序?
要求应该是在客户端网页上发送消息到服务器,然后服务器响应这个消息并执行程序,然后将程序运行结果返回给网页。
当然还有一种要求是用网页管理服务端程序,跟远程桌面一样,这个由于篇幅限制不多解释,请自己去搜索VNC这个远程控制台。
回到正题,一般来讲,服务端脚本语言都可以执行程序的,这里以PHP为例子
<?phpexec("./run.sh",$output)//接收控制台输出的内容或者程序执行的结果print_r($output)//输出这个结果给网页?>
一般来讲,在网页直接指令执行服务器文件风险性极高,所以许多时候这些服务端脚本语言的默认设定是不会让你执行文件的,需要自行修改相关设置参数提升权限才可以获取让脚本语言执行文件的权限,系统文件夹的权限也相应需要修改。不同系统对应设置不同。
Windows的权限设置很详细,建议要进行这种高风险操作之前先详细了解文件权限方面知识,这部分内容不在本题范围中,不多做解释。
Linux下PHP程序使用多线程?
引言
别的语言都在一窝蜂地搞编译,搞虚拟机,搞多线程,提高效率。我们整天敲 PHP 代码,除了 Nginx 调用 php-fpm 拉取 PHP 文件的解析外,对于多线程有多少了解?
请问,PHP 能不能使用多线程?如果能,怎么实现的?
本文就带你打开这个疑问。
学习时间这个问题的答案是肯定的,PHP 可以使用多线程。我们借助于 pthreads 实现:
该项目提供了与基于Posix Threads的PHP兼容的多线程。
有啥亮点没?下面这些全是:
一个易于使用,快速学习的面向对象的PHP 7.2线程API执行所有预定义和用户声明的方法和函数,包括闭包。包括现成的同步无限的可能性...需要一些扩展的基础的支持,PHP 7.2 及以上版本,ZTS Enabled ( Thread Safety ),Posix Threads Implementation。
还有一些注意事项:
pthreads是一个面向对象的API,它提供了PHP中多线程所需的所有工具。 PHP应用程序可以创建,读取,写入,执行并与线程,辅助对象和线程对象同步。 警告:pthreads扩展名不能在Web服务器环境中使用。 因此,PHP中的线程应仅保留给基于CLI的应用程序使用。
命令行应用脚本完全适用,这也与我们编写 Bash,Python等等类似。下面举一个例子:
然后执行一次:
再执行一次:
实际运用上面的代码是个示例性质的应用,仅仅是为了展示多线程运行。下面来一段业务代码。
该类模拟一个url请求。因为网络问题,有可能失败,或者不确定返回时间,所以适合并行。接着我们使用该类进行多网络请求并发。为了减轻系统负荷,使用微秒延时。
$t = microtime(true);
$g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10));
实例化之后,我们发起请求:
if ($g->start()) {
printf("Request took %f seconds to start ", microtime(true) $t);
while ( $g->isRunning() ) {
echo "."; usleep(100);
}
if ($g->join()) {
printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) $t, strlen($g->data));
} else
printf(" and %f seconds to finish, request failed\n", microtime(true) $t);
}
其他方案如果不用 pthreads 库提供的能力,该怎么写并行的多任务呢?其实 PHP 提供了一个 popen 函数,用于打开进程文件指针。
popen 返回一个和 fopen 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose 来关闭。此指针可以用于 fgets,fgetss 和 fwrite。 当模式为 'r',返回的文件指针等于命令的 STDOUT,当模式为 'w',返回的文件指针等于命令的 STDIN。
直接上代码:
for ($i=0; $i<10; $i++) { // 打开10个进程 for ($j=0; $j<10; $j++) { $pipe[$j] = popen('script2.php', 'w'); } // 等待完成 for ($j=0; $j<10; ++$j) { pclose($pipe[$j]); } }
大家看到了实现的方法与 pthreads 完全不同,这段代码仍然是阻塞运行,只不过同时打开10个进程,并行运行。
并行与多线程完全不同。不过,可视作一个简单的解决方案吧。
写在最后经过上述两种实现方法,大家应该对于多线程,多进程,并行这些概念有一些认识了。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
脚本网站有哪些?
不知道你说的脚本网站是什么意思,是用脚本语言做的网站还是学习脚本的网站。那如果是学习脚本的网站,像w3cschool。如果说是脚本语言写的网站就多了去了。php,Python,js等都是脚本语言,而这些语言做的网站又有相当大的比重。
ECS Linux 服务器如何配置网站以及绑定域名?
Linux上如果要搭建网站服务,那需要安装配置WEB依懒的运行环境,现在主流的WEB环境有LNMP、或者Tomcat+Java+MySQL系的。考虑到当下LNMP环境居多,所以我们建议先安装LNMP集成环境。
Linux下安装LNMP集成环境LNMP集成环境代表的是:Linux+Nginx+MySQL+PHP的集成安装包,安装方法如下:
# wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp通过这一行命令即可实现LNMP环境的安装,在安装过程中它会让你选择相关的软件包的版本和设置数据库密码等,根据终端上的提示信息一步步操作即可。
Linux下配置NginxNginx是当下主流的HTTP及反向代理服务器,通过上面的安装后,我们就需要修改Nginx的配置文件,主要是绑定域名及站点根目录。
# vi /usr/local/nginx/conf/nginx.conf找到server配置节,大概的配置项如下图示:
在防火墙中开放WEB端口通过以上设置后,虽然绑定了站点的域名、端口、根目录,另外也配置了动态PHP脚本的支持,虽然这样,外网可能依旧无法访问网站。
阿里的ECS有一个安全组的概念,你必须要确保两点:
在iptables 或者 firewalld 里开放WEB端口(80端口或自定义端口);
在阿里云控制台中ECS的安全组配置里设置入站规则,如下图所示:
在Nginx中绑定域名和配置站点都需要修改Nginx的配置文件(nginx.conf)。虽说网上有一些开源的管理面板,但我们并不推荐使用这类面板,因为它们的权限给的很大,还是有一定风险的。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
php脚本运行速度总这么慢?
因为一直都很慢吖。需要解析大量的模板,十分消耗资源