您的项目应该选用哪一种编程语言?深入对比PHP与Python

在软件开发领域,PHP与Python之间正在进行一场战斗。它似乎永远不会结束。

开发一个成功的网站或应用程序首先要选择一种可靠的编程语言。

随着生产高性能、可扩展、可靠、安全和灵活的网络产品的激烈竞争,有必要选择一个明智的技术基础,包括编程语言。

虽然有经验的程序员有他们的个人偏好、逻辑观点和最喜欢的软件开发工具,但初学者和项目经理在选择开始使用的编程语言时会遇到麻烦。

有很多编程语言,如 Java、Python、JavaScript、PHP、Ruby 等,每种语言都有其优点和缺点。您还需要根据您独特的项目要求、时间表、最终目标、预算以及其他因素来缩小您对编程语言的选择范围。

如果您已经加入了PHP与Python的这场战斗,并且对必须继续战斗的一方感到困惑,那么本文可以帮助您。

让我们找出哪些在我们的比较标准中胜出,哪些适合您的项目要求。

PHP与Python的基本情况

在我们开始比较这两种编程语言之前,重要的是我们首先要了解它们是什么。

什么是PHP?

PHP

PHP

超文本预处理器 (PHP) 是一种开源脚本语言,广泛用于服务器端Web开发。

PHP由丹麦裔加拿大程序员Rasmus Lerdorf于1994年创建,最初命名为个人主页。他于1995年6月发布了第一个PHP版本(PHP 1.0)。

从那时起,针对后续PHP版本进行了各种开发,我们将PHP 8作为最新的PHP版本于2020年11月发布。

PHP项目的吉祥物是一个蓝色的“elePHPant”(大象),侧面写有它的标志。Vincent Pontier是创造这个吉祥物的设计师。

使用在守护程序、模块或可执行CGI(通用网关接口)中实现的PHP解释器,通过Web服务器处理PHP代码。

PHP代码的这种解释和执行可以是任何类型的数据,例如二进制图像。

特征

PHP的特点包括:

PHP的特点

PHP的特点

  • 开源:由于PHP是开源的,任何人都可以下载并使用它来完成他们的 Web 开发目标。这使全球的开发人员能够检查代码、发布错误并参与编码和错误修复。
  • 简单易用:PHP简单易用,这是许多开发人员喜欢这种编程语言的主要原因之一。

它的语法与C语言非常相似,具有良好的组织和逻辑结构。与许多脚本语言相比,学习PHP和深入编码也很容易。

  • 多种数据库 支持:PHP支持多种数据库,包括MySQL、Oracle、PostgreSQL等,以及数据库集成。
  • 跨平台兼容性:几乎可以运行在所有操作系统上,包括Windows、Mac、Linux和Unix。PHP脚本还可以跨设备运行,例如计算机、笔记本电脑、平板电脑和手机。此外,PHP还兼容各种服务器,如IIS、Apache等。
  • 灵活:PHP提供了更大的灵活性和嵌入功能。它可以很容易地与JavaScript、HTML、XML等集成。
  • 错误报告和异常处理:PHP支持一些预定义的错误报告常量来生成错误警告。此外,它有助于异常处理以显示错误并修复它们。
  • 高效、快速的性能: PHP脚本比许多脚本语言(如JSP、PERL、ASP.NET等)表现出更好的性能。它的数据加载和数据库连接也更快,以实现高效的数据库管理、邮件功能和服务器管理。
  • 实时监控:它提供用户最近的日志详细信息。您也可以访问CPU和内存使用数据。
  • 面向对象的特性: PHP中面向对象的特性有助于提高其速度并提供额外的特性,例如继承、数据封装等。
  • 更多功能: PHP提供魔术常量、正则表达式、PDO类、支持cookie、shell命令行执行等等。

它是干什么用的?

这种服务器端脚本语言可以生成动态页面内容、在服务器上创建文件、打开、写入、读取、关闭或删除文件。

PHP是数据库友好的,这就是为什么它可以毫不费力地添加、修改或删除数据库中的数据。

除此之外,PHP还可以从您的表单中收集数据、支持cookie、执行数据加密和控制用户访问。

根据W3Techs的一份报告,截至2021年3月19日,互联网上所有站点中有79.2%使用PHP作为其服务器端编程语言。

一些使用PHP的流行网站是WordPress.com、Facebook.com、Wikipedia.org、Zoom.us、Microsoft.com、Canva.com、Salesforce.com等等。

应用

  • 基于Web的应用程序和网页:现代网页和应用程序必须提供更高级别的自定义、高度交互和友好的用户界面,支持无缝集成,并在提供快速性能的同时实现安全的在线交易。PHP使用三层架构,在您的服务器、数据库系统和浏览器上线性运行以满足这种需求。
  • 图形设计和图像处理: PHP在管理文本内容和图形设计和图像处理方面是可靠的。它支持与许多库的集成,如 ImageMagick、GD库、Imagine和更多基于PHP的应用程序。它允许用户旋转、调整大小、裁剪、添加水印、创建缩略图和提取各种格式的图像,如PNG、GIF、JPEG、WBMP 和 XPM。
  • Web CMS: PHP扩展了对各种数据库的支持,并通过协议与不同的服务交互,包括IMAP、POP3、HTTP、COM、SNMP等。

因此,创建WordPress、Moodle、Drupal、Joomla等Web内容管理系统是很常见的。

  • 基于GUI的应用程序:您可以使用PHP-GTK 2和ZZEE PHP GUI创建基于图形用户界面 (GUI) 的应用程序,这些应用程序允许PHP脚本并将您的代码编译成.exe文件,该文件可以独立运行。
  • 数据表示:使用Image_Graph和PHP等工具,您可以创建不同的数据表示,如图表、图形等。它在利用各种形式的数据表示的电子商务网站和应用程序中很有用。
  • 创建flash元素:您可以使用基于PHP的开源库(例如Ming)创建flash元素,如渐变、形状、位图、按钮、文本、变形、动画、动作、电子邮件表单、登录表单等。
  • 构建电子商务应用程序:使用基于PHP的框架(如 CodeIgniter)可以轻松构建电子商务应用程序。它适用于各种规模的企业,从初创企业到企业。使用PHP创建的电子商务平台有Magento、PrestaShop、OpenCart等。

这就是PHP的全部内容。

现在让我们来看看Python,并为这两种语言之间的正面竞争奠定基础。

什么是Python?

Python

Python

Python是一种面向对象的、解释性的、高级编程语言。

它由Guido van Rossum开发并于1991年发布。 随着各种版本和颠覆的发展,我们现在有Python 2和Python 3,最新的是Python 3.9.2,最近于2021年2月19日发布。

PHP的设计理念侧重于代码可读性,并使用重要的缩进和动态语义。它是动态类型的,支持垃圾收集和各种编程范式,例如结构化(主要是过程式)、函数式和面向对象编程。

因此,它可以帮助程序员清晰地进行逻辑编码,对于大型和小型项目都很有用。由于其广泛的标准库列表,Python也被称为“包含电池”的编程语言。

特征

Python的主要特点是:

Python的特点

Python的特点

  • 免费开源: Python可在其官网免费下载使用。您还可以使用其公开可用的源代码并根据您的需要对其进行修改。
  • 易于学习和编码:这种高级语言比其他语言更容易学习,包括Java、JavaScript、C++、C等。在其中编写程序不需要您管理内存或记住整个系统架构。

它还对开发人员友好,使用简单、不太复杂的语法和简单的英语和数学。因此,使用Python进行编码变得毫不费力,这就是许多开发人员喜欢它的原因。

  • 面向对象:这是Python的主要特性之一,它支持对象封装、类、构造和析构等概念。
  • 可扩展:该语言不是在其核心构建整个功能,而是被设计为可通过各种模块进行扩展。由于紧凑的模块化,开发人员发现将可编程接口添加到现有应用程序中很容易。您还可以使用C/C++编写Python代码并进行编译。
  • 解释型语言: Python代码是逐行执行的,类似于Java、C++和C,一次一个。因此不需要编译代码,调试更容易,节省时间。
  • 可移植: Python代码是可移植的。如果您有适用于Windows操作系统的Python代码,并且您想在其他操作系统(如Mac、Linux或Unix)上运行它,则无需更改代码即可。
  • 动态类型:在运行时而不是在开始时决定变量类型。因此,您不需要指定像int、char、long、double等变量类型。它减少了代码行数并使编程更加简单。

例如,在Java中,你写int x = 5

但是在Python中,你会写x = 5。就是这样。这个“x”可以是任何类型的变量。

  • 压缩标准库:它的标准库包含了丰富的功能和模块,因此您不必从头开始编写每一个代码。您可以简单地将可用代码用于单元测试、正则表达式、Web浏览器、CGI、图像处理等应用程序。

它是干什么用的?

Python有很多用途,例如:

  • 创建Web应用程序: Python是用于Web开发的最佳编程语言之一,因为它为您提供了一系列选项。它支持Pyramid和Django等框架,Bottle和Flask等微框架,以及Django CMS和Plone等高级CMS。这些框架灵活、可扩展、安全,并带有各种模块和标准库,可用于简化数据库交互、内容管理等任务。其标准库还支持HTML、XML、FTP、IMAP、POP等互联网协议.此外,它的Package Index 还有其他有用的库,包括 Requests、Feedparser、Beautiful Soup、Paramiko 和 Twisted Python。
  • 机器学习(ML)和人工智能(AI):人工智能和机器学习项目不同于传统的软件项目和模型。他们需要不同的技能、技术和工具,以及稳定可靠的语言。Python配备了这样的功能和灵活性来处理独特的项目需求。它的简单性、平台独立性、资源丰富的库、一致性和活跃的开发社区加强了人们在AI和ML项目中对Python的使用。以人工智能和机器学习而闻名的Python包包括用于复杂计算的SciPy、用于可视化数据的Seaborn、用于数据分析的Pandas、用于并行计算和记录工作会话的IPython TensorFlow,以及用于机器学习的Keras、用于高级科学计算的NumPy等等。
  • 桌面 GUI 创建:由于Python具有模块架构并适用于多个Oss,您可以使用高效的文本处理工具、框架或Python模块创建桌面GUI,例如PyQt4、PyQt5、WxPython、PyGtk、PySide、PyGUI, Tkinter等
  • 软件开发和快速原型设计: Python应用程序和软件包旨在简化软件开发过程。Python可以帮助您开发Web和桌面应用程序,以及能够进行数字和科学计算的复杂应用程序。开发人员广泛使用Python,甚至用于构建控制、管理和测试。对于这些单独的目的,您可以分别使用SCons、Trac或Roundup,以及Apache Gump或Buildbot。
  • 其他用途: Python用于使用PySoy等库进行游戏开发,PySoy是一种基于Python的3D游戏引擎。这就是视频游戏开发人员在诸如战地 2、文明-IV等游戏中使用Python的原因。

Python还用于构建企业级或业务应用程序,需要更高的可扩展性、可扩展性和可读性。为此,可以使用支持Python的工具,例如Odoo和Tryton。

它用于Boo、Cobra、Swift、CoffeeScript等的语言开发。Python是Oss like Linux发行版“Ubiquity Installer”背后的语言。您还可以使用Python控制大数据、连接到数据库、执行网页抓取、利用图形设计和图像处理等。

深入对比PHP与Python

PHP与Python的比较

PHP与Python的比较

既然我们已经讨论了PHP和Python两种语言以及它们的特性和应用程序,现在是时候将它们与下面解释的各种参数进行比较了。

它将帮助您了解哪种语言更适合哪种用途,使用它们的效率和容易程度,以及哪种语言可以为您的开发工作和时间带来更好的结果。

让我们开始拉锯战——PHP与Python。

  1. 哪个更容易学习?
  2. 易于安装
  3. 性能和速度
  4. 图书馆支持
  5. Web 框架选项
  6. 环境管理
  7. 灵活性、可扩展性和多功能性
  8. 安全
  9. 调试
  10. 文档
  11. 他们如何使用 WordPress
  12. 他们如何使用 MySQL
  13. 用于 Web 和应用程序开发
  14. 开发者社区和支持
  15. 相似之处
  16. 差异
学习曲线

更容易学习

更容易学习

PHP虽然是一种通用语言,但非常适合开发更复杂的Web应用程序。它的语法有点类似于Java、C、C++和Perl。函数返回,if条件,whilefor循环也类似。

在PHP中,变量名区分大小写。它以分号终止语句,并将空格和换行符视为一种自由格式的语言。它要求您在变量前加上$,使用大括号和- >操作符来指示方法。

总的来说,学习PHP和其中的代码需要相当长的时间,尤其是初学者。但是他们的开发者社区正在努力让它变得更容易。

例如,PHP 4涉及改进的面向对象编程,具有更好的抽象,使任务更容易。

另一方面,Python更容易学习,即使对于初学者也是如此。这种脚本语言旨在通过整洁的格式、更简单的语法和简单的英语单词而不是标点符号轻松阅读。

Python不使用花括号来分隔块。相反,它使用空格缩进。这为其语义提供了准确的视觉结构。Python还包括很少使用的分号,并且很少有特殊情况和语法异常。

这些属性使Python编码易于学习和编写,长度更短,并且更易于调试。除此之外,它还为错误留下了空间,因为在出​​现小错误的情况下,主要代码不会中断。这就是为什么各种编程课程使用Python向初学者教授编程基础知识的原因。

结论:Python是一个明显的赢家。

易于安装

易于安装

易于安装

PHP安装相对容易。它可以在Windows、Linux和macOS X上很好地安装和运行。您还可以在全球许多共享托管网站上以较低的费用找到它。

如果你想构建一个小应用程序,PHP将是一个很大的帮助。

相比之下,Python的安装可能具有挑战性。在系统上已经安装了另一个Python版本的macOS X上,它也会变得更加困难。

另一个缺点是这个已经存在的Python版本会过时,因此不适合开发应用程序。即使您尝试安装新的Python包,您也需要安装新的Python版本。

我们知道这会令人沮丧。

除此之外,在Windows上安装Python可能会有些棘手。为了降低遇到问题的风险,请使用诸如Chocolatey之类的包管理器。

但是,如果您是Linux用户,则在您的计算机系统上安装Python不会有任何问题。

结论:PHP在安装方面胜出。

性能和速度

性能和速度

性能和速度

根据2018年12月发布的Unbounce报告,79%面临网站速度和整体性能问题的在线购物者表示,他们不会再次访问或光顾该网站。

它表明您开发的所有应用程序和网站都必须响应迅速且加载速度更快——最多在2-3秒内。

尽管速度和性能会因硬件资源、内存、存储空间、代码逻辑、硬盘访问时间、数据路径宽度等各种因素而有所不同,但您使用的编程语言也是一个需要考虑的因素。

因此,比较Python和PHP的速度和性能至关重要。

PHP 的早期版本很慢,包括需要大量时间来执行代码的PHP 5.x。似乎他们的开发人员社区在使用PHP 7.x提高编程语言的性能和速度方面做了大量工作。

它比包括Python在内的许多编程语言都快得多。Zend Engine 3.0也随 PHP 7一起发布,使该编程语言比其先前版本快2倍。

相比之下,Python的代码编译过程设计得更快,即使不安装缓存系统。当创建和/或修改文件时,它会将此代码转换为字节码。它比引入PHP 7.x之前的PHP快得多。

例如,如果您正在开发一个银行系统,它每天都会收到大量的流量,那么它需要非常快。更短的延迟会极大地影响系统性能。在这种情况下,建议使用PHP 7而不是Python。

但是,如果您想构建一个对速度和时间延迟没有太大影响的简单应用程序,您可以同时使用Python和PHP。

结论:PHP在速度和性能方面胜出。

库支持

开发人员可以将库与Web框架集成以促进快速开发。他们可以根据自己的开发需求进行一些调整,随时重用这些库。

这样,您的项目可以在更短的时间内完成,测试风险更低,并且成本也最小化。因此,图书馆管理是一个需要考虑的重要因素。

PHP的库支持不是那么强。但是,PHP 7引入了一个强大的工具Composer,它是它的依赖项管理器。您可以将它与Packagist(PHP的包存储库)配对并更有效地管理您的库。

但是Composer还很年轻,目前可能还不是完全可靠的。

另一方面,Python为库提供了出色且成熟的支持。Python利用“Pip Installs Python”(Pip)进行包控制。Pip速度快,可以更轻松地管理Python应用程序的库,而且您可以更轻松地解析项目需求。

如今,人工智能和机器学习支持的Web应用程序需求旺盛。如果您还想开发这样的应用程序,Python有一些出色的ML库,例如TensorFlow、Scikit Learn、Keras、Theano和许多更成熟的库。

所有这些库都与Web框架无缝集成,而且速度非常快,易于使用和安装。因此,Python有助于使Web开发更简单。

结论:Python是赢家。

Web框架选项

Python和PHP都为Web框架提供了广泛的选项。

最常用的基于PHP的框架有Zend(非常高效)、CodeIgniter、Symfony、Laravel、Yii、Phalcon等。

如今,由于Laravel、Symfony和CodeIgnitor的配置要求最低、可扩展性更高且性能更快,因此许多现代PHP应用程序都使用Laravel、Symfony和CodeIgnitor。

使用这些框架的著名网站示例:Vogue、Sony VAIO UK、Barracuda、Casio 等。

Python还提供了许多Web框架来支持您进行高度定制的开发,支持解释请求、生成响应、存储数据等功能。

基于Python著名的Web框架有Django、TurboGears、Pylons、CubicWeb、Flask、Bottle、Pyramid等。

Django近来使用率很高,非常适合完美主义的开发人员。它是一个鼓励简洁设计和快速开发的高级框架。它强调自动化,您可以用更少的代码更快地构建应用程序。

其他Python支持的框架在安全性、性能、更少的依赖项和易于定制方面也很足智多谋。

结论:在支持的Web框架方面,PHP与Python的拉锯战是平局。

环境管理

在PHP与Python中讨论环境管理是必要的,特别是如果您不想在构建应用程序时依赖软件容器。

不使用容器意味着您需要注意将应用程序的已安装语言与库版本分开。这并不像听起来那么简单,需要大量的耐心、时间和精力。

因此,在环境管理方面,PHP将virtPHP作为其环境管理器。但是,它并没有积极维护,并且已经存档了很长时间。这就是为什么即使是PHP开发人员也不建议使用virtPHP,而是使用容器。

容器是运维开发的更好选择,开发人员可以使用它来运行软件流程、小型微服务,甚至大型应用程序。

它为应用程序开发提供了更少的开销、一致的操作、更多的可移植性和更高的效率。这就是为什么如今像Kubernetes和Docker这样的容器需求量很大的原因。

事实上,如果你使用容器,你甚至不必考虑环境管理。

如果没有,让我们看看Python基于环境管理有多好。

Python有Virtualenv,它是管理环境的最佳应用程序之一。它可以并排安装多个Python版本,管理它们并快速切换版本。

Virtualenv是在开发者社区中广受赞誉的原始环境管理应用程序之一。他们管理这个优秀的应用程序已经超过10年了。

结论:Python在环境管理方面明显优于PHP。

灵活性、可扩展性和多功能性

PHP和Python的灵活性

PHP和Python的灵活性

随着业务的增长,其用户群也随之增长。因此,他们使用的应用程序必须是可扩展的,以满足客户的需求。

可扩展的应用程序还可以根据市场需求为企业提供更大的灵活性,并在旺季承受高流量。它还必须为您提供根据业务需求扩大和缩小规模的选项。

Python和PHP都适用于具有广泛框架和库的Web开发。

PHP支持Symfony、Laravel等强大的框架,如上所述,因此您在开发、测试和管理过程中不会遇到麻烦。

但是,当我们谈论可扩展性时,Python凭借其人工智能和机器学习功能,可以适应新趋势并根据需求进行扩展,因此比PHP更具优势。

相比之下,即使在最近对该语言进行了一些重大改进之后,PHP在响应新趋势和不断增长的需求方面也不太灵活。

Python还提供了许多Web框架,您已经知道Python在库支持方面做得更好。您拥有Django和Flask等高度可扩展、安全且快速的框架。

无论您是要部署ML模型还是使用独立和解耦的组件来构建应用程序,Django都可以提供帮助。您可以根据不断变化的业务需求更换或拔掉这些组件。

由于其多功能性和简单性,Instagram使用Django框架,在PHP-vs-Python竞赛中选择了Python。它可以帮助这个社交媒体网站每天轻松地迎合数百万用户。

结论:又是Python。

安全

PHP与Python:安全性

PHP与Python:安全性

网络安全可能是互联网世界最大的担忧之一。

网络攻击也随着技术的进步而发展,例如跨站点脚本 (XSS)、恶意软件注入、网络钓鱼诈骗、DDoS攻击等。

最终,企业和个人在金钱和声誉方面遭受巨大损失。

根据2021年3月发布的Varonis报告,88%的全球组织在2019年面临鱼叉式攻击,而所有网络安全漏洞中有95%是由于人为错误造成的。

这就是为什么开发人员和设计人员需要认真对待Web开发的安全性。选择一种可以提供更好安全性的编程语言是他们应该追求的目标。

2015年12月发表的另一项研究表明,大约86%的用PHP编写的应用程序至少涉及一个XSS漏洞。PHP中的许多安全问题由于其庞大的社区已得到解决,但您需要选择最安全的替代方案。

Python比PHP更安全。它具有许多安全功能,您可以利用这些功能构建具有高端功能和明确目标的复杂应用程序。事实上,这份2019年3月的报告显示Python是最安全的编程语言之一。

例如,Python支持Django,它带有安全功能来保护应用程序免受威胁。这就是许多政府组织和银行机构利用Python构建具有一流安全性的强大应用程序的原因。

结论:Python毫不犹豫地获胜。

调试

PHP与Python:调试

PHP与Python:调试

PHP与Python的下一个比较是两种语言的调试效率。

作为开发人员,您需要为两种情况做好准备,无论何时有效,何时无效。

当您的应用程序有错误时,它不会按照预期的方式运行,并且可能会招致安全风险。

在这种情况下,高效的调试器有助于找出您的代码出了什么问题并修复它。

调试PHP可能有点棘手。有时可能需要您做一些额外的工作来完成调试过程。但是,使用像XDebug这样的PHP调试器并不难,因此您可以更快地开始调试过程并完成它。

与PHP一样,Python也有出色的调试器,例如Python Debugger (PDB),即使您是初学者也可以轻松使用。因此,只需按下“调试”按钮并开始消除错误即可获得性能更好且更安全的应用程序。

此外,PHP和Python的一些调试器可以与IDE集成,例如PyCharm或Visual Studio Code。

结论:平局。

文档

如果您是初学者或将开始新项目的有经验的开发人员,那么您需要的最重要的事情之一就是良好的文档。这对于您选择的编程语言或将要使用的工具至关重要。

它将提供完整的信息,并帮助您了解最新的发展动态以及您必须应对的挑战。

这就是为什么我们需要在PHP与Python的比较中了解每种编程语言的文档有多好。

PHP和Python都有丰富的综合文档。您可以参考适用于两者的无数论坛、网站、讨论板、教程和课程。

PHP有一个文档网站,包含10种语言的信息。它以简单的语言深入涵盖了PHP的特性。允许开发人员在每个页面上发表评论,以通过有效的示例帮助阐明复杂的概念。

但是这些评论一旦做出贡献,就会永远保留在页面上,以便每个访问者都可以查看。结果,即使是较旧的评论也会显示在与以前的PHP版本相关的顶部。

这意味着它们要么已解决,要么已过时。但是当人们第一次看到它们时,会造成很多困惑,因为他们不会立即了解已经解决了哪些问题以及他们仍在处理哪些问题。这是原生PHP文档的一个缺点。

使用Python,您不会遇到这样的情况。它还包含每个版本的深入文档,包括目录、引入的新改进、安装Python模块、完整教程、用法、库参考、扩展、常见问题部分等。

除此之外,文档不显示注释,因此没有混淆。但是,某些人可能难以理解给出的解释。

比较每个优点和缺点,由于过时的注释,Python仍然得分更高,这在PHP中造成了混乱。

结论:Python。

结合WordPress

PHP与Python:WordPress

PHP与Python:WordPress

WordPress使用PHP作为其核心编程语言。因此,它在WordPress社区中已经很重要了。

如果您想了解PHP如何与WordPress一起工作,只需从他们的官方网站下载WordPress并打开下载的ZIP文件。它将包含有关PHP的大多数详细说明。

除此之外,如果您安装WordPress主题或插件,您会在其中大部分找到PHP文件。

因此,当访问者浏览您的网站时,服务器上的PHP模块会处理PHP代码,以HTML格式生成输出,并将其显示在访问者的屏幕上。

WordPress需要PHP来处理URL的请求、从数据库中获取数据、加载文件、获取文章元数据、验证用户权限、调用插件和主题、上传文档或图像等等,此外还需要构建网页和界面。

现在是最好的事情:您不一定需要学习PHP来使用和管理WordPress网站。

但是,如果您想修改默认的WordPress属性、进行复杂的自定义或开发新的WordPress插件和主题,那么学习PHP以及CSS和HTML基础知识是必须的。

WordPress及其插件和主题是用PHP、Python编写的,而WordPress似乎是一对奇怪的组合。

这就是为什么如果您只需要一个CMS或计划创建博客,请使用WordPress,但选择Python来开发用于金融技术、网络抓取或数据分析的高端应用程序。

尽管如此,如果你仍然想在WordPress中使用Python,你需要找到一个公共链接——MySQL。

WordPress和Python都支持MySQL。您将需要一个插件,它可以向您的数据库发起MySQL查询,然后在您的前端显示输出。

然而,许多人不想忍受这些麻烦。

因此,毫无疑问,PHP与WordPress配合得很好,并且在这里以显着的优势击败了Python。

结论:PHP获胜。

连接MySQL

MySQL于1995年推出,与PHP同年。它迅速成为数据库世界的领导者。它是开源的,具有许多优点,例如高速、更少的数字足迹、可扩展、易于安装、可靠的安全性等等。

因此,如果您想在您的应用程序中使用MySQL,您需要确保哪种编程效果更好。因此,我们将在这场PHP与Python之战中比较MySQL的可用性。

MySQL和PHP的组合为构建几乎任何类型的网站提供了无限的选择,从大型商业门户网站到小型联系表格。PHP几乎可以与所有数据库一起使用,例如Oracle、MySQL等。

MySQL最常用于基于PHP的Web产品中,因为它是开源的、可免费获得、高度通用、易于使用、快速、可靠并使用标准SQL。

人们广泛使用PHP和MySQL来开发跨平台应用程序,这些应用程序可以运行在Windows、Unix、Linux、Mac等不同的Oss上。

PHP旨在在您完成运行php命令后毫不费力地连接到MySQL 。但是使用其他编程语言,您可能需要安装额外的代码或一些插件才能连接到MySQL。

来到Python,它需要一个特殊的驱动程序来与MySQL数据库对话。这些驱动程序可从第3方供应商处获得。在使用其中任何一个之前,建议您阅读Python文档并检查哪些驱动程序符合其标准接口。

MySQL文档使用“连接器”一词代替“驱动程序”来阐明它连接以及与数据库交互。

不同的编程语言有不同的驱动程序或连接器,Python使用MySQL连接器。

要建立连接,您可以使用PIP安装MySQL Connector。接下来,您需要使用Python测试数据库连接,然后创建数据库。现在,您可以执行SQL查询、获取结果、将任何更改通知数据库并关闭连接。

所有这些过程对许多人来说可能很棘手。因此,在PHP和Python中比较MySQL哪个更好用,它绝对是PHP。

结论:PHP是赢家。

用于Web和应用开发

接下来,了解什么更适合您的Web和应用程序开发是关键。您选择的语言必须非常适合您的独特要求。

PHP和Python都适用于Web和应用程序开发。因此,这一切都归结为您计划开发的具体内容、复杂程度和规模。

PHP是专为Web开发而设计的。如果您想开发一个功能有限的不太复杂的小规模或中等规模的应用程序,PHP可能是合适的。

此外,PHP通过其功能丰富的现成工具帮助加快或简化开发过程。它也可以是开发CMS和电子商务网站的明智选择。PHP使您能够与第三方应用程序完美集成。

另一方面,Python具有强大的功能,非常适合构建基于AI、ML、数据科学、大数据等的应用程序。对于TensorFlow、Theano、Pandas等库,您有多种选择(我们在上一节中已经看到了其中的一些)。

所以,你可以看到Python和PHP各有千秋。您选择哪一个很大程度上取决于您的项目要求。如果您还对这两种语言及其选择其中一种的可用性有透彻的了解,那将是最好的。

结论:没有明确的赢家。

开发者社区和支持

拥有一个活跃和支持的开发者社区是可取的。它可以帮助新开发人员和好奇的专业人士清除他们的疑虑。

PHP和Python已经在几十年前在市场上发布,并且拥有优秀的开发人员社区来支持专业人士。

您可以在专门的网站和论坛上搜索它们并提出问题以更好地了解您的编程和Web开发技能。

自1995年推出以来,PHP通过新功能发布和问题解决方案不断改进。因此,我们现在有了PHP 7,它以其令人难以置信的速度和性能而闻名。

有一个庞大的开发人员社区可用于PHP扩展帮助。由于该语言的强大功能,Facebook使用PHP作为其主要的后端编程语言。

说到Python,它于1991年发布,拥有庞大的开发人员社区,他们进一步致力于发展编程语言并使其更加健壮。因此,它的社区也像PHP一样强大。

当Google使用Python开发YouTube和其他产品时,Python变得更加出名。此外,其他使用Python的著名公司包括Pinterest、Reddit,甚至Instagram。

因此,在开发者社区和支持方面,PHP与Python的竞争势均力敌。

结论:两者都是赢家。

相似之处

PHP与Python:相似性

PHP与Python:相似性

现在,让我们找出PHP和Python之间的一些相似之处:

  • 这两种语言都是开源的,可以免费使用。
  • 两者的调试过程都很好。
  • 他们都有定制的IDE,可以很好地与所有主要操作系统配合使用。
  • 两者都有一个很棒的开发人员社区,他们可以在遇到疑问时为您提供帮助并扩展您的技能。
  • 两者都支持动态类型和方法链。
不同之处

PHP和Python的主要区别总结如下:

范围PHPPython
语言类型用于Web开发的脚本语言通用编程语言
学习曲线比Python更难学易于学习,即使是初学者
带有示例的框架支持更多的框架(例如:CodeIgniter、Laravel、Symfony、Yii、CakePHP)与PHP相比,框架较少,但可用的框架是有效的(例如:Django、TurboGears、Bottle、Flask、Web2Py、Tornado、Pyramid)
速度早期版本较慢,但PHP 7非常快——甚至比Python还要快。从一开始就设计得很快
数据库连接它对数据库友好,能够无缝连接25多个数据库。数据库连接是可能的,但并非适用于所有人。另外,它需要驱动程序。
句法它的语法可能有点复杂,使用花括号、命名规则、变量前的$符号等等。它的语法清晰明了。无需使用大括号,也无需定义变量。
库支持提供强大的Packagist,但PHP在提供更广泛的库支持方面仍然滞后对几乎所有类型的应用程序的大量库支持
关键标识符免费开源,频繁增强,悠闲部署动态类型,简单代码,快速开发
人气更受欢迎(大约79%的网站使用PHP)不如PHP流行(互联网上大约1.1%的网站使用Python)
可读性可读性和可维护性较差它旨在降低复杂性并使用简单的英语具有高度可读性。
函数式编程没有功能范式支持函数式编程方法。
安全目睹了许多安全攻击内置网络安全功能更安全
文档有据可查且可用,但旧评论不断出现以助长混乱。有据可查,没有混淆
用法主要用于网页开发更广泛的用途,包括网络和应用程序开发以及人工智能、机器学习、数据科学、大数据等新兴技术
知名用户Facebook、WordPress、维基百科、雅虎YouTube、Pinterest、Instagram、Quora、优步、Spotify、Dropbox
GitHub星星30K30.4K
Forks8.04K8.23K

小结

在这个PHP与Python的比较中,Python以2分的优势获胜。但这并不意味着您必须选择Python而忽略PHP。PHP和Python都是适用于Web和应用程序开发的优秀编程语言。

很长一段时间以来,PHP一直是大多数Web开发项目的首选。但是现在,Python正在慢慢地以其卓越的特性和功能进入高端科学应用程序,并迎合这个现代、精通技术的世界。

最后,这在很大程度上取决于您的项目要求以及您在PHP或Python方面的技能、知识和专业知识。如果您是一位经验丰富的程序员并且需要设计一个复杂性较低的基本网站,则可以选择其中任何一个。

但是,如果您是初学者,请尝试先学习Python,然后可以逐渐转向PHP或其他语言。

同样,如果您需要开发基于科学的应用程序和站点,例如AI、ML、大数据等,Python会更好。

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
标题:PHP基础教程 出处:风流的CG网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 内容: 提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程! 一、PHP简介 PHP一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。 1.简介 PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHPPHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.net)自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装过程很简单。 如果你的机器解决了2000问题,那么PHP也一样没有千年虫问题! 1.1 历史 三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而PHP4就可以充分利用这个引擎。PHP4还处在BETA测试阶段。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点(http://www.zend.com)了解更多。 PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP的先进之处 应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点: - 学习过程 我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。 PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。 你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。 - 数据库连接 PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。 - 可扩展性 就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可伸缩性 传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 - 更多特点 PHP开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能! 1.3 竞争对手:ASP,mod_perl,JSP 我当然不清楚ASP/JSP能做些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。 据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。 mod_perl与Perl一样强大,只是更快一些。 二、PHP入门 PHP站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对PHP熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP编程。 2.1 首要条件 你首先必须要有一个正在工作着的支持PHP的web服务器。我假定在你的服务器上所有PHP文件的扩展名为.php3。 2.2 PHP的安装 生成一个名为test.php3的文件,含有以下内容: 然后在你的浏览器中打开此文件。看看这个页面你就知道你的PHP安装使用的选项了。 2.3 语法 就像前面提到的一样,你可以混合编写你的PHP代码和HTML代码。因此你必须有办法将两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法! 从HTML中分离 以下是可以使用的方法: . . . 语句 与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix风格的注释方式: /* C,C++风格多行注释 */ // C++风格单行注释 # Unix风格单行注释 Hello,World! 通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语: First PHP page 2.4 数据类型 PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。 数值 数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值: $a = 1234; # 十进制数 $a = -123; # 负数 $a = 0123; # 八进制数 (等于十进制数的83) $a = 0x12; # 十六进制数(等于十进制数的18) $a = 1.234; # 浮点数"双精度数" $a = 1.2e3; # 双精度数的指数形式 字符串 字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下: $first = 'Hello'; $second = "World"; $full1 = "$first $second"; # 产生 Hello World $full2 = '$first $second';# 产生 $first $second 可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。 数组与哈希表 数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。 // 一个包含两个元素的数组 $a[0] = "first"; $a[1] = "second"; $a[] = "third"; // 添加数组元素的简单方法 // 现在$a[2]被赋值为"third" echo count($a); // 打印出3,因为该是数组有3个元素 // 用一个语句定义一个数组并赋值 $myphonebook = array ( "sbabu" => "5348", "keith" => "4829", "carole" => "4533" ); // 噢,忘了教长吧,让我们添加一个元素 $myphonebook["dean"] = "5397"; // 你定义的carale元素错了,让我们更正它 $myphonebook["carole"] => "4522" // 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看 echo "$myphonebook[0]"; // sbabu echo "$myphonebook[1]"; // 5348 其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。 对象 使用new语句产生一个对象: class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); 改变变量类型 在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。" $foo = "0"; // $foo是字符串(ASCII 48) $foo++; // $foo是字符串"1" (ASCII 49) $foo += 1; // $foo现在是整数(2) $foo = $foo + 1.3; // $foo是一个双精度数(3.3) $foo = 5 + "10 Little Piggies"; // $foo是一个整数(15) $foo = 5 + "10 Small Pigs"; // $foo是一个整数(15) 如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。 2.5 变量与常量 可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样就可以声明全局变量了 } 更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。 PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define("CONSTANT","value")。 2.6 运算符 PHP具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用"="。 算术和字符 以下只有一种运算符是有关字符的: $a + $b :加 $a - $b :减 $a * $b :乘 $a / $b :除 $a % $b :取模(余数) $a . $b :字符串连接 逻辑和比较 逻辑运算符有: $a || $b :或 $a or $b :或 $a && $b :与 $a and $b :与 $a xor $b :异或 (当$a或$b为true时为true,两者一样时为false) ! $a :非 比较运算符有: $a == $b :相等 $a != $b :不等 $a < $b :小于 $a $b :大于 $a >= $b :大于等于 与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。 优先权 就和C以及Java一样! 2.7 控制流程结构 PHP有着与C一样的流程控制。我将在下面大概介绍。 if, else, elseif, if(): endif if (表达式一) { . . . } elseif (表达式二) { . . . } else { . . . } // 或者像Python一样 if (表达式一) : . . . . . . elseif (表达式二) : . . . else : . . . endif ; Loops. while, do..while, for while (表达式) { . . . } do { . . . } while (表达式); for (表达式一; 表达式二; 表达式三) { . . . } //或者像Python一样 while (expr) : . . . endwhile ; switch switch是对多重if-elseif-else结构的最好的替换: switch ($i) { case 0: print "i equals 0"; case 1: print "i equals 1"; case 2: print "i equals 2"; } break, continue break中断当前的循环控制结构。 continue被用来跳出剩下的当前循环并继续执行下一次循环。 require, include 就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。 2.8 函数 你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型: function foo (变量名一, 变量名二, . . . , 变量名n) { echo "Example function.\n"; return $retval; } 所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。 2.9 类 利用类模型建立类。可以参考PHP手册中对类的详细解释。 class Employee { var $empno; // 员工人数 var $empnm; // 员工姓名 function add_employee($in_num, $in_name) { $this->empno = $in_num; $this->empnm = $in_name; } function show() { echo "$this->empno, $this->empnm"; return; } function changenm($in_name) { $this->empnm = $in_name; } } $sbabu = new Employee; $sbabu->add_employee(10,"sbabu"); $sbabu->changenm("babu"); $sbabu->show(); 三、从实例入手  PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。 3.1 计划一个站点 一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。 标题页面--front.html 这里我们有一个非常简单的html文件: 我的个人主页--欢迎 我的个人主页 欢迎 欢迎来我的寒舍,虽然这里现在暂时还没有什么。 不过我希望马上就可以多起来。 Copyright ? 我自己,1999 联系信息页面--count.html 同样我们又有了一个简单页面: 我的个人主页--联系信息 我的个人主页 联系信息 你可以通过1-800-PHP-INFO联系我 Copyright ? 我自己,1999 3.2 HTML到PHP 从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。我们将把这些include文件放在一个叫include的子目录下。下面我们就把这些站点的通用内容写进文件中。 全站通用变量设定:common.inc <? // 全站通用变量 $MyEmail = "phptalk@tnc.org"; $MyEmailLink = "$MyEmail"; $MyName = "PHP Talk"; $MySiteName = $MyName."'s Home Page"; ?> 通用页面头部:header.inc 通用页面底部:footer.inc Copyright ? by , 1999 新的页面front.php3: 欢迎来我的寒舍,虽然这里现在暂时还没有什么。 不过我希望马上就可以多起来。 新的cont.php3: 你可以通过1-800-PHP-INFO联系我 现在你就可以猜出这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。 3.3 计数器 让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码: 然后我们更改front.php3文件以显示这个计数器: <? include("include/counter.inc"); // 我把计数值放在文件counter.txt中,读出并输出 printf ("%06d \n", get_hitcount("counter.txt")); include("include/footer.inc"); ?> 看看我们的新front.php3 3.4 反馈表单 让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。 PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。 在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。 根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单的PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。 表单:form.php3 Your feedback on my home page. 处理表单:sendfdbk.php3 <? include("include/common.inc"); $title = "Feedback"; include("include/header.inc"); if ( $name == "" ) { // 现在我很讨厌匿名的留言! echo "Duh ? How come you are anonymous?"; } elseif ($name == "Your name") { // 这个浏览者真是不想透露姓名啊! echo "Hello ? Your name is supposed to be replaced with your actual name!"; } else { // 输出一段礼貌的感谢语 echo " Hello, $name. Thank you for your feedback. It is greatly appreciated. Thanking you $MyName $MyEmailLink "; // 最后mail出去 mail($MyEmail, "Feedback."," Name : $name E-mail : $email Comment : $comment "); } include("include/footer.inc"); ?> 3.5 简单的站内搜索引擎 PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。 <FORM ACTION="" METHOD="POST"> <INPUT TYPE="text" NAME="searchstr" value="" SIZE="20" MAXLENGTH="30"> <? if ( ! empty($searchstr) ) { // empty()用来检查查询字串是否为空 // 如果不为空,调用grep查询 echo "\n"; // 调用grep对所有文件进行大小写非敏感模式的查询 $cmdstr = "grep -i $searchstr *"; $fp = popen( $cmdstr, "r" ); // 执行命令并输出管道 $myresult = array(); // 存储查询结果 while( $buffer = fgetss ($fp, 4096)) { // grep返回这样格式: 文件名:匹配字串出现行数 // 因此我们利用函数split()分离处理数据 list($fname, $fline) = split(":",$buffer, 2); // 我们只输出第一次匹配的结果 if ( !defined($myresult[$fname])) $myresult[$fname] = $fline; } // 现在我们将结果存储在数组中,下面就可以处理并输出了 if ( count($myresult) ) { echo "\n"; while(list($fname,$fline) = each($myresult)) echo " $fname : $fline \n"; echo "\n"; } else { // 如果没有查询结果 echo "Sorry. Search on $searchstr returned no results.\n"; } pclose($fp); } ?> 注释: PHP_SELF是PHP内建的变量。包含当前文件名。 fgets()按行读取文件,最多4096(指定)字符长度。 fgetss()与fgets()相似,只是解析输出的HTML标记。 split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。 each()是一个数组操作函数,用来更方便的遍历整个数组。 popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。 请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索 四、与数据库链接 通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。 PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。 想获得更多有关在Microsoft Windows平台上安装支持PHP3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:www.csoft.net/~vsbabu/articles/oraphp.html。 4.1 连接 <? if ($conn=Ora_Logon("user@TNSNAME","password")) { echo "SUCCESS ! Connected to database\n"; } else { echo "Failed :-( Could not connect to database\n"; } Ora_Logoff($conn); phpinfo(); ?> 以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。 4.2 查询 假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子: <? /* * 连接数据库并执行查询 */ function printoraerr($in_cur) { // 检查Oracle是否出错 // 如果存在错误则显示 // 当指针被激活时每次请求Oracle后调用该函数 if(ora_errorcode($in_cur)) echo "Oracle code - ".ora_error($in_cur)."\n"; return; } /** 主程序 */ if (!($conn=ora_logon("user@TNSNAME","password"))) { echo "Connection to database failed\n"; exit; } echo "Connected as connection - $conn\n"; echo "Opening cursor ...\n"; $cursor=ora_open($conn); printoraerr($cursor); echo "Opened cursor - $cursor\n"; $qry="select user,sysdate from dual"; echo "Parsing the query $qry ...\n"; ora_parse($cursor,$qry,0); printoraerr($cursor); echo "Query parsed \n"; echo "Executing cursor ...\n"; ora_exec($cursor); printoraerr($cursor); echo "Executed cursor\n"; echo "Fetching cursor ...\n"; while(ora_fetch($cursor)) { $user=ora_getcolumn($cursor,0); printoraerr($cursor); $sysdate=ora_getcolumn($cursor,1); printoraerr($cursor); echo " row = $user, $sysdate \n"; } echo "Fetched all records\n"; echo "Closing cursor ...\n"; ora_close($cursor); echo "Closed cursor\n"; echo "Logging off from oracle... \n"; ora_logoff($conn); echo "Logged off from oracle \n"; ?> (译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分) 4.3 显示结果 以下代码演示了怎样查询数据库并将结果输出: <? function printoraerr($in_cur, $conn) { // 检查Oracle是否出错 // 如果存在错误则显示 // 当指针被激活时每次请求Oracle后调用该函数 // If it encountered an error, we exit immediately if(ora_errorcode($in_cur)) { echo "Oracle code - ".ora_error($in_cur)."n"; ora_logoff($conn); exit; } return; } function exequery($w_qry,$conn) { $cursor=ora_open($conn); printoraerr($cursor,$conn); ora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn); ora_exec($cursor); printoraerr($cursor,$conn); $numrows=0; $w_numcols=ora_numcols($cursor); // 显示头部 echo " \n"; for ($i=0;$i<$w_numcols;$i++) { $align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; echo "\t".ora_columnname($cursor,$i)."\n"; } echo "\n"; while(ora_fetch($cursor)) { echo "\n"; for ($i=0;$i<$w_numcols;$i++) { $align=(ora_columntype($cursor,$i)=="NUMBER")?"RIGHT":"LEFT"; if(ora_columntype($cursor,$i)=="LONG") echo "". ora_getcolumn($cursor,$i)."\n"; else echo "".ora_getcolumn($cursor,$i)."\n"; printoraerr($cursor,$conn); } $numrows++; echo "\n"; } if ($numrows==0) echo "Query returned no records \n"; else { echo "\n"; echo "Count\n"; echo "$numrows\n"; echo "\n"; } echo "\n"; ora_close($cursor); return; } // 主程序 if(!($conn=ora_logon("user@SID","password"))) { echo "Error: Cannot connect to database\n"; exit; } $qry="SELECT deptno \"Dept\" ,empno \"Emp\" ,empnm \"Name\" ,salary \"Salary\" FROM employee ORDER BY 1,2"; exequery($qry); ora_logoff($conn); ?> (译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分) 4.4 基于HTTP的Oracle登录 将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。 <? if(!isset($PHP_AUTH_USER)) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorized to enter the site \n"; exit; } else { if (!($conn=ora_logon("$PHP_AUTH_USER@$SID",$PHP_AUTH_PW))) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorised to enter the site \n"; exit; } } ?> 五、其它功能 5.1 生成图像 PHP可以操作处理图像。如果你已经安装了GD库,你甚至可以利用PHP生成图像。 (译者注:以上代码段缺少注释,请读者参考PHP Manual的图像处理函数部分) 这段代码在其他页面中通过以下标记调用,然后以上的那段button.php3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images/button1.gif--最后输出到浏览器。假如你想在表单域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。 5.2 Cookies PHP支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子: <? if (empty($VisitedBefore)) { // 如果没有设定cookie,为cookie赋上当前时间值 // 函数中的最后一个参数声明了该cookie保存的时间 // 在这个例子中是1年 // time()函数返回自1970年1月1日以来的以秒数计的时间 SetCookie("VisitedBefore",time(), time()+(60*60*24*365)); } else { // 欢迎浏览者再次光临 echo "Hello there, welcome back"; // 读取cookie并判断 if ( (time() - $VisitedBefore) >= "(60*60*24*7)" ) echo "Why did you take a week to come back. You should be here more often!? "; } ?> 5.3 基于HTTP验证 基于HTTP验证当PHP以CGI模式运行时不能实现。我们可以使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。这两个变量被储存在$PHP_AUTH_USER和$PHP_AUTH_PW中,你可以使用这两个变量验证合法并允许进入。以下的例子通过用户名称/密码对为tnc/nature的验证一名用户的登录: 事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。 5.4 文件上传 你可以利用PHP实现文件的功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上。以下就是该功能的简单演示: ( upload.html ): Upload Your File (You may notice a slight delay while we upload your file.) 下面是处理上传的文件: ( receiver.php3 ): 2000000 ) { $error_msg = "Sorry, your file is too large."; return; } $the_time = time (); // 你需要对以下目录有写权限 $upload_dir = "/local/uploads"; $local_file = "$upload_dir/$the_time"; if ( file_exists ( '$local_file' ) ) { $seq = 1; while ( file_exists ( "$upload_dir/$the_time$seq" ) ) { $seq++; } $local_file = "$upload_dir/$the_time$seq"; }; rename ( $uploadfile, $local_file ); display_page (); } function display_page () { // 这里是你的页面内容 } php3 Receiving Script <? if ( $error_msg ) { echo "$error_msg"; } if ( $sendit ) { do_upload (); } elseif ( $cancelit ) { header ( "Location: $some_other_script" ); exit; } else { some_other_func (); } ?> 5.5 常用函数 我们简单来看看一些常用的函数。 数组 array - 生成数组 count - 数组元素个数 sort - 数组排序,另有其他几种排序函数可供使用 list - 列出数组元素 each - 返回下一个key/value对 current - 返回当前数组元素 next,prev - 传回当前数组元素前后指针 日期和时间 checkdate - 验证日期/时间格式 date - 生成日期/时间格式 time - 当前时间信息 strftime - 格式化日期/时间 目录、文件系统 chdir - 改变目录 dir - 目录类别 opendir, readdir, closedir - 开启、读取、关闭目录 fopen, fclose - 开启、关闭文件 fgets, fgetss - 逐行读取内容 file - 将整个文件读入一个数组变量中 正则表达式 ereg - 匹配正则表达式 eregi - 大小写非敏感匹配正则表达式 ereg_replace -匹配正则表达式并替换 eregi_replace -大小写非敏感匹配正则表达式并替换 split - 依规则切开字符串并以数组形势存储 字符串 AddSlashes - 加上斜杠后使用字符串 echo - 输出一个或多个字符串 join, implode - 将数组元素合并为字符串 htmlentities, htmlspecialchars - 将HTML特殊字符转换为HTML标记形式 split - 依规则切开字符串并以数组形势存储 5.6 扩展我们的范例主页 我们将使用以上提到的一些函数和思想为我们的范例主页添加更多的动态内容。我们可以在每个页面的顶部加上导航栏,同时使得当前页自动的不被链接显示;同时还可以添加一个用户验证表单以便上传音乐、图像等文件并自动更新页面。 导航栏 实际上就是在footer.inc文件中加上一段代码。假设你的web站点中所有后缀为.php3的文件都会出现在导航栏中,以下就是被存为include/navbar.inc的代码: <? /* 输出该导航栏,链接所有除当前页的站内.php3文件 */ # 读取目录 $d = dir("./"); echo " | \n"; while($entry = $d->read()) { // 忽略无文件情况 if ( !is_file($entry) ) continue; /* 将文件名与扩展名分开。由于.是正则表达式特殊字符,应该用\引出 */ list($filenm, $fileext) = split("\.",$entry, 2); // 忽略非.php3文件情况 if( $fileext != "php3" ) continue; /* 现在我们已经把.php3文件都选出,下面搜寻文件中的第一行(标题) 类似$title="something"; 并将以上标题内容分开,用作链接文字 */ $linknm = ""; $fp=fopen($entry,"r"); while($buffer=fgets($fp, 4096)) { $buffer = trim($buffer); // 我们已经把每个文件的标题放在文件的第一行以便搜索 // 但是当你改变变量名称时可能会带来大麻烦 if (ereg("title *= *\"", $buffer)) { /* 我们已经取得了标题内容并可以在此基础上 进行去除空格等处理。 必须以PHP代码方式处理,比如$title = "blah blah" */ eval($buffer); // 然后将链接文字显示为标题文字 $linknm = $title; break; } } fclose($fp); if ( $entry == basename($PHP_SELF) ) echo "$linknm"; else echo "$linknm"; echo " | "; } $d->close(); echo " \n"; ?> 照片收藏夹 我们将引用基于HTTP的验证、文件系统函数和文件上传功能维护放置图像文件的目录。 同时我们需要建立一个可以列出在该目录下所有照片的页面。 文件上传 <? include("include/common.inc"); // 我们在这里再做一次用户验证 if(!isset($PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=\"$MySiteName\""); Header("HTTP/1.0 401 Unauthorized"); echo "Sorry, you are not authorized to upload files\n"; exit; } else { if ( !($PHP_AUTH_USER==$MyName && $PHP_AUTH_PW==$MyPassword ) ) { // 如果是错误的用户名称/密码对,强制再次认证 Header("WWW-Authenticate: Basic realm=\"My Realm\""); Header("HTTP/1.0 401 Unauthorized"); echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid."; exit; } } if ( $cancelit ) { // 当浏览者按下"取消"按钮则转向首页面 header ( "Location: front_2.php3" ); exit; } function do_upload () { global $userfile, $userfile_size, $userfile_name, $userfile_type; global $local_file, $error_msg; global $HTTP_REFERER; if ( $userfile == "none" ) { $error_msg = "You did not specify a file for uploading."; return; } if ( $userfile_size > 2000000 ) { $error_msg = "Sorry, your file is too large."; return; } // Wherever you have write permission below... $upload_dir = "photos"; $local_file = "$upload_dir/$userfile_name"; if ( file_exists ( $local_file ) ) { $error_msg = "Sorry, a file with that name already exists"; return; }; // 你还可以由此检查文件名称/类型对以确定是何种文件:gif,jpg,mp3… rename($userfile, $local_file); echo "The file is uploaded\n"; echo "Go Back\n"; } $title = "Upload File"; include("include/header.inc"); if (empty($userfile) || $userfile=="none") { // 输出以下表单 ?> <FORM ACTION="" ENCTYPE="multipart/form-data" METHOD=POST> (You may notice a slight delay while we upload your file.) <? } else { if ( $error_msg ) { echo "$error_msg"; } if ( $sendit ) { do_upload (); } } include("include/footer.inc"); ?> 照片图库 Here are some of our family photos. This PHP script can really be made better, by splitting into multiple pages. read()) { if (is_file("photos/$entry")) echo "\n"; } $d->close(); ?> 另外,你可以在文件上传的表单中加上一个输入元素去描述该上传的文件。这个元素将被存储在文件中,然后被以上的照片图库的那段代码所读出并显示出来。 六、网络资源 你可以通过web上的众多资源更多的了解PHP3。许多邮件列表和书籍对你都非常有用。 6.1 站点 PHP的爆炸性流行使得一夜之间出现了很多基于PHP的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。 国内 http://www.phpuser.com - PHP中文用户,也就是这里了 http://www.phpx.com - 中国PHP联盟 http://www.phpsite.net - PHP专门站 http://www.phpchina.com - PHP CHINA http://www.cpcw.com/netschool/homepage/cgi/ - 电脑报网页陶吧 国外 http://www.php.net/ - PHP官方站点 http://www.devshed.com/ - 极好的教程 http://px.sklar.com - 代码交换 http://www.phpbuilder.com/ - 教程、专栏和邮件列表档案 http://www.weberdev.com/ - 文章和代码 http://www.phpwizard.net/ - 提示与技巧 http://www.iometrics.com/php/phplist.php3/ - IOMetrics scripts的档案 http://www.e-gineer.com/phpkb/ - PHP知识库 6.2 邮件列表 你可以在PHP官方站点的"支持"栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。 php3@lists.php.net - 主要的列表 php-dev@lists.php.net - 主要针对开发php-list@exp.com.cn - 本站的邮件列表,与论坛相通 6.3 引人注目的工程 一些基于PHP的工程已经发展得比较完善。其中一些更出色更引人注目的是: http:// phplib.netuse.de - PHPLib,一整套PHP函数库 http://www.phorum.org - Phorum是一个很完善的BBS系统 http://www.fishcartsql.org - FishCartSQL是一个电子商务解决方案 http://www.midgard-project.org - Midgard是一个网络应用开发平台 Generated by Bo-blog 2.0.2 sp2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WPHunter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值