php怎么获取程序,请简单描述PHP程序的工作流程?
asp PHP .net web语言都是一样的,通过自身的计算机制 以及数据库查询。 在服务器上生成结果然后通过HTML方式展示给客户端。
php主要用来做什么?
PHP 脚本主要用于以下三个领域:
1、服务端脚本。这是 PHP 最传统,也是最主要的目标领域。开展这项工作需要具备以下三点:PHP 解析器(CGI 或者服务器模块)、web 服务器和 web 浏览器。需要在运行 web 服务器时,安装并配置 PHP,然后,可以用 web 浏览器来访问 PHP 程序的输出,即浏览服务端的 PHP 页面。如果只是实验 PHP 编程,所有的这些都可以运行在自己家里的电脑中。请查阅安装一章以获取更多信息。
2、命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。这种用法对于依赖 cron(Unix 或者 Linux 环境)或者 Task Scheduler(Windows 环境)的日常运行的脚本来说是理想的选择。这些脚本也可以用来处理简单的文本。请参阅 PHP 的命令行模式以获取更多信息。
3、编写桌面应用程序。对于有着图形界面的桌面应用程序来说,PHP 或许不是一种最好的语言,但是如果用户非常精通 PHP,并且希望在客户端应用程序中使用 PHP 的一些高级特性,可以利用 PHP-GTK 来编写这些程序。用这种方法,还可以编写跨平台的应用程序。PHP-GTK 是 PHP 的一个扩展,在通常发布的 PHP 包中并不包含它。如果对 PHP-GTK 感兴趣,请访问其» 网站以获取更多信息。
facebook、youbute 、新浪、百度、淘宝、搜狐和腾讯等等这些知名的网站都有很大一部分业务是也是用PHP来开发的
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 :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
编写程序计算从当前时间距离2020年元旦还有多少天?
把每个月的天数加起来不就好了,说说具体需求吧,像获取2018年三月的天数如下:
// 获取2018年3月份的天数
$day = date('d', strtotime('2018-03'));
php源码怎么安装?
一般的整站程序在你第一次访问首页时会自动转到安装。如果没有的话就需要看它的说明文档了,一般都有说明的。或者你就在目录里找找,看有没有intall这种名字的文件或文件夹。