有用的PHP扩展

分享于 

24分钟阅读

Web开发

  繁體

介绍

在这里你可以下载一些有用的扩展,带有完整的功能演示和所有需要的文件。
我的想法是通过增加新功能和扩展,让本文在将来增长。

你可以下载的所有代码都是 written的和可重用的PHP代码,可以在你的项目中 copy-and-pasted。
下载的内容还包含一个的手动和的Linux和收费的Windows的所需的PHP扩展。

当前本文包含以下章节:

  • 项目 1: 上传进度显示
  • 项目 2: 使用 MagickWand 进行图像处理
  • 项目:图像切割器允许从上传的图片在线中裁剪出一部分
  • Wamp服务器的问题
  • 如何从本文中运行本文的代码:在( Xampp ) 中运行
  • 黑客安全 Webprogramming

项目 1: 上载进度显示

这里项目显示浏览器中一个或者多个文件上载的进度。

为什么浏览器会显示所有当前下载的窗口,但浏览器只是显示 ?
上载巨大文件的用户不知道上传是否需要 10分钟的时间,如果在 10小时内完成。
智能浏览器应该显示进度条和长文件上传剩余时间- 与下载过程一样。
难以置信的:甚至目前的浏览器都没有这样一个有用的基本功能 !

这真是可笑 现在网络开发人员必须完成浏览器开发人员所忽略的工作 !
这并不容易 PHP必须以复杂的方式从web服务器获取上传状态。 ( 比如。apache/iis )
因此,必须在服务器上安装一个PHP扩展。

如果你为这个话题开始谷歌,你会发现很多。 但是大多数的东西是buggy的,不工作或者不支持多个文件。 文档通常不存在。

我决定在 NAME" uploadprogress"中使用PHP扩展。 但是这个扩展没有文档和一个非常丑陋的演示,他的作者使用两个 iframe。

你可以在这里找到具有以下功能的完整功能演示:

  • Javascript通过从服务器获取获得进度信息,每1 秒更新一次显示器。
  • 显示一个收费的上传 progressbar
  • 显示上传状态: 当前文件。上载字节。总字节。当前速度。剩余时间的数目。
  • 上传可以用取消链接或者浏览器的Stop按钮取消。
  • 上传活动时,整个网页全部被屏蔽,等待 cursor 显示。
  • 在各种浏览器上测试代码。

上传进度- 安装

Windows

在你可以下载的ZIP文件中,你可以找到 php_uploadprogress.dll。 将这个DLL复制到你的PHP扩展文件夹( 以为单位的文件夹在 PHP.ini extension_dir )。

找到 Windows的这个DLL是不容易的。 你只找到很少的网站,你可以下载已经编译为 Windows的这个。 在尝试了这个DLL的一些不同版本之后,我发现这些DLL中的大部分都有自己的或者崩溃 Apache。 为了正确运行这个DLL的版本,我投入了几个令人沮丧的日子,让它运行正常 ! 我在网页上找到了它。

Linux

在ZIP文件中,还可以找到一个包含源代码的PECL包。

上载进度- 配置

你必须将以下行添加到你的PHP.ini file:

extension = php_uploadprogress.dll
uploadprogress.file.filename_template = C:Program Filesxampptmpinfo_%s.txt
uploadprogress.get_contents = 0
重要

模板文件的路径必须有效并且它必须包含一个" %s" !
这里" %s"将替换为上载的标识符。
每次上传时,在给定文件夹中生成一个小的文本文件,该文件存储下载的实际状态。 上传完成后将删除这里文件。

UploadProgress - 测试

如果你的浏览器与服务器( localhost ) 在同一台计算机上运行,将完全不可以能测试上载进度显示。
即使上传了 100 MB文件,也不会看到显示器的一个实现。

如果internet中没有用于测试的web服务器,或者要测试localhost以便进行调试,则有一个技巧:

安装 Proxomitron ! 这里是一个具有许多功能的本地代理服务器,我在这里不会解释。 一个功能是在浏览器中显示和显示流量。

在浏览器中,必须在本地主机端口 8080上配置一个代理服务器,并移除任何本地主机的异常。

然后在Proxomitron中单击按钮日志窗口,在日志窗口中单击鼠标右键,然后在菜单中单击"查看已经发布的数据"。 那就是。

现在Proxomitron显示了浏览器( 黄色) 和浏览器( 绿色) 中的所有流量。 如果将 20 MB文件上载到服务器,你将看到所有已经发布的数据( 灰色)。 但是,如果你曾经在日志窗口中打印 20 MB数据,那么你就会知道这是。 使用这个技巧,你大大减慢了数据传输,上传进度显示将完美地工作- 即使本地主机。 不关闭日志窗口 ! 它必须一直打开,而你测试 UploadProgress

项目 2: 使用MagickWand进行图像处理

为什么不使用库?
PHP附带了构建在图像处理中的库,它非常基本。 它只支持 GIF,JPG和 PNG,而且功能很少。

几年前,当我第一次使用库的时候我震惊,因为最近对 GIF的支持被删除 ! 我不能相信,在一些PHP开发人员的脑中,完全疯狂的想法是为了删除互联网最重要的图形格式。 由于缺乏GIF支持,我决定不使用。 他们花了几年时间才认识到他们的致命错误并再次。

几个月前我给了库一个机会。 但是,用 90像素旋转a 像素的图像,内存 error。 我需要一个在线图像编辑器,人们可以上传任何图像,也可以从他们的数码相机。 所以GD的图书馆又安排了一次。 另外库只提供基本的功能,结果图像的质量不是最好的。

我搜索了 alternatives MagickWand 库,找到了

  • MagickWand的编程更智能化: 当你使用大图像时,它们存储在filemappings中,而不是保存所有的图像数据到内存中。 我从未看到在使用 MagickWand 时出现内存不足的错误。
  • MagickWand 库具有大量的功能,包括透明图像操作,各种转换和过滤器。
  • 单独调整大小功能提供了一个长的过滤器列表,用于调整图像的大小: ,GaussianBlackmanHermiteHanningHammingCatromMitchellLanczos,,QuadraticBoxSinc,。
  • 支持的图像格式列表很长: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CR2, CRW, CUR, CUT, DCM, DCR, DCX, DFONT, DNG, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, EXR, FAX, FITS, FRACTAL, FTS, G, G3, GIF, GIF87, GRADIENT, GRAY, HISTOGRAM, HTM, HTML, ICB, ICO, ICON, INFO, IPL, JBG, JBIG, JNG, JP2, JPC, JPEG, JPG, JPX, K, LABEL, M, M2V, MAP, MAT, MATTE, MIFF, MNG, MONO, MPC, MPEG, MPG, MRW, MSL, MSVG, MTV, MVG, NEF, NULL, O, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PEF, PFA, PFB, PFM, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RAF, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMFWIN32, WMZ, WPG, X, X3F, XBM, XC, XCF, XPM, XV, XWD, Y, YCbCr, YCbCrA, YUV
  • 结果图像的质量为 excellent,在演示中可以看到
  • 你可以使用任何TTF字体将文字写入图像。 字体被指定为不需要安装在服务器上的TTF文件
  • 非常长的图形命令列表: MagickWand: 247命令,DrawingWand: 117命令,PixelWand: 51命令
  • 图书馆运行稳定的。 我从未见过崩溃( 比如。 通过传递损坏的图像文件
  • 代码是开放源代码

但是MagickWand库有一个缺点:
文档不可用。 你可能在互联网上发现的是命令行的定义及其参数。 但详细的解释并不存在,而且示例代码很难找到。

这是我发布本文的原因之一。 我的ready-to-use包让你从MagickWand开始非常容易。

MagickWand - 演示项目

要将文本添加到这里图像,你需要精确的4行PHP代码:

这个演示项目包含一个的PHP类"咒语",你可以重用它来处理图像。
它包含以下功能:

  • 加载任意大小的图像,也带有透明背景
  • 调整图像大小( 创建缩略图)
  • 裁剪图像( 请参见下面的ImageCutter项目)
  • 旋转图像
  • 模糊图像
  • 翻转/镜像图像
  • 将文字写入图像
  • 创建验证码图像
  • 将图像保存到磁盘
  • 直接将图像流到浏览器
  • 定义JPG压缩的质量
  • 从图像 header 获取信息( 比如。 不加载整个图像的宽度,高度,类型
  • 类有一个干净的错误处理( 没有垃圾代码),并在错误时抛出异常

该类演示了 MagickWandDrawingWandPixelWand 和以下"咒语"命令的用法:
NewMagickWand, NewDrawingWand, NewPixelWand, MagickPingImage, MagickGetImageType, MagickReadImage, MagickNewImage, MagickCompositeImage, MagickGetExceptionString, PixelGetExceptionString, DrawGetExceptionString, MagickGetImageWidth, MagickRotateImage, MagickResizeImage, MagickCropImage, MagickFlipImage, MagickFlopImage, MagickBlurImage, DrawSetFont, DrawSetFontSize, DrawSetGravity, PixelSetOpacity, DrawSetFillColor, MagickAnnotateImage, MagickSetFormat, MagickEchoImageBlob, MagickSetImageCompression, MagickSetImageCompressionQuality, MagickWriteImage, DestroyMagickWand, DestroyPixelWand, DestroyDrawingWand.

MagickWand - 添加更多功能

显然,我的类只覆盖了 MagickWand 库中的大量功能中的一小部分。

如果你需要更多的功能,请不要在这里发布诸如"如何绘制圆"。
因为我不需要它,所以我不需要它,所以我不知道它 !
你可以在自己的上尝试 ,当你得到它时,向类添加一个新函数,并将代码与演示一起发送给我。
如果代码有用,工作正常并且编写干净,我将在CodeProject上发布它。
我希望通过你的帮助,我的Magick 类会增长,变得更加通用。

因此,如果在 Magick 类中缺少需要的功能,这是因为还没有添加它

MagickWand - 创建验证码图像

互联网上充满了错误的验证码图像:

由于图像的字符和随机数据的颜色不同,这些captcha很差。 应用颜色过滤器,过滤掉所有不是 black的东西,然后把剩下的东西 send OCR软件,可以正确识别字符 100%。 这些captcha非常容易破解。

这些验证码是坏的,因为字符被裁剪成。 在左图像中,第二个字符可能是"i"或者"t"。 最后一个字符可能是"u"或者" 0"。 你必须猜测。

这是最差的验证码: 它的不可读。 你必须猜测。

这是我用 Magick 类创建的captcha的一个示例。

  • background的字符和线条具有完全相同的颜色( 不可能进行颜色过滤)
  • 字符和 background 具有相同的行宽( 不可能进行过滤)
  • 字符具有随机大小。旋转和位置
  • 这些字符是完全可见的,不被裁剪。
  • background 与字符具有类似的roundings
  • 这种captcha易于阅读,但无法检测文本识别软件( OCR )

你可以使用自己的background 图像和你自己的字体( 任意 TTF )。 你还可以在每次生成新的captcha时修改 background 映像。 我建议使用一个大 background 图像,裁剪它的随机部分。 请注意,旋转较慢,所以我不推荐 回滚 !

演示项目还演示了,如果用户已经输入了有效的验证码代码,那么你可以通过收费的Ajax轻松地验证。

重要

由于字符大小和 lowercase"x"看起来相同,所以你应该总是检查captcha代码 code insensitive"x"。

MagickWand - 版本混淆

MagickWand 扩展可以编译为:

  • 对每个像素的每个像素都使用 8位( 代表绿色,8位绿色和每个像素的8位) ( 2^24颜色= 16色)
  • 我已经知道了human的颜色,但是我确信人眼不能分辨出很多颜色。

没有理由你应该使用Q16版本。 Q8版本提供出色的图像质量,使用较少的内存,比Q16快。 在 phpinfo() 中,你可以看到安装了哪个版本。

此外,MagickWand 扩展也可以编译为:

  • static,这意味着所有必需的代码都被编译成一个单独的大的独立的DLL
  • 动态 dynamic意味着PHP的MagickWand 扩展需要小的DLL,它需要在服务器上安装整个 ImageMagick包 小型动态PHP扩展DLL加载了两个额外的。

MagicWand - 安装

Windows

在你可以下载的ZIP文件中,你会找到一个收费的Q8 Q8 compiled compiled compiled php_magickwand.dll。 将这个DLL复制到你的PHP扩展文件夹( 以为单位的文件夹在 PHP.ini extension_dir ) 中。服务器上没有其他 ! 这个DLL是独立的 !

找到这个DLL并不容易,因为你会注意到到 Windows 二进制文件的所有链接都是死掉的。 如果你使用的是 MagickWand的网页,那么你就可以看到不再支持(。FTP服务器上的文件夹仍然存在,但它是空的) 了。 我在的页面上找到这个 DLL。

Linux

在ZIP文件中,你还可以找到RPM包。 必须在服务器上安装。 ( PHP扩展是动态编译的)

MagickWand - 配置

将这一行添加到你的PHP.ini:

extension = php_magickwand.dll

项目 3: 图像切割器

这里项目允许用户上传任何大小和任何格式的图像( 比如。 他们的数码相机拍摄了 7万像素的照片,并。 因为服务器允许用户将自己的护照照片添加到个人数据中,所以我编写了这个项目。 护照照片总大小为 ,pixels像素。 as的大部分人都不能使用像Photoshop这样的程序上传图像,这个图像切割器可以很容易地从上传的图片中裁剪出一部分。

功能
  • 用户上传一个高分辨率图像( 演示使用Gandalf和他的魔杖)
  • 这里图像将按最大大小收缩像素,然后显示给用户。
  • 如果需要,用户可以对图像进行旋转
  • 然后用户在缩小图像的脸上放置一个绿色 rectangle,然后单击按钮"裁剪"。
  • 他将看到裁剪的图像预览。
  • 当单击 final"接受"按钮时,临时收缩图像将被删除,裁剪图像将被移动到 final 目标。
  • 如果用户永远不接受临时映像,就应该在 Temp taskjob中删除所有旧文件,因为如果用户从不接受 final 映像,临时映像将保留在服务器磁盘上。
  • 执行所有这些步骤时,页面从不重新加载: 代码使用收费的Ajax和一个复杂的JavaScript。
  • 代码已经在各种浏览器上进行了测试。

下载

图像切割器项目是一个单独的下载。 你将必须安装 MagickWand 扩展,该扩展不包括在这里下载中。 因此,你必须额外收取下载项目。 为了使项目保持简单,不包括上传图像的代码。 显然你会用我的UploadProgress 项目。 这个演示项目使用 4个固定图像,你可以使用它们来。

Wamp服务器的问题

如果你有一个Wamp服务器,你将无法使用在这里下载的dll。
Wamp显示一个非常愚蠢的错误消息,表示扩展dll的版本与服务器的PHP版本不兼容。
这是完全无意义的,因为不同的PHP版本之间可以能只有很小的差别,通常影响扩展的功能。 Wamp强迫你每次更新服务器到新版本时重新编译扩展。

有一个简单的解决方案: 不要用 Wamp 用Xampp来代替它。

初学者教程:在 Windows 上运行示例( Xampp )

  • 检查计算机上是否没有运行端口 80的服务器上的程序。 如果已经安装了 ,请确保在菜单工具-> 选项-> 连接下,复选框未选中FileSharing 软件也可能占用端口 80.
  • 检查浏览器是否没有配置HTTP的代理服务器。 如果是的话,关掉它 !
  • 服务器安装收费,其中包括 Apache。mySql。PHP和更多到的C:Program FilesXampp服务器。
  • 打开文件 C:Program FilesXamppapachebinphp.ini,并在第2 章中进行更改描述 上面。
  • 复制 php_uploadprogress.dll 和 php_magickwand.dll 到文件夹 C:Program FilesXamppphpext
  • 之后,从startmenu中的Xampp 控制面板 启动Apache服务器。
  • 将ZIP文件的全部内容复制到文件夹中: C:Program and C:Program FilesXampphtdocsMagickWand
  • 如果你正确地完成,这里文件将存在: C:Program FilesXampphtdocsUploadProgressindex.php
  • 在浏览器中输入 http://localhost。 从左边的Xampp菜单中选择了 phpinfo()
    现在,你必须看到两个扩展" MagickWand"和" UploadProgress",分别有一。
  • 在浏览器中,输入 http://localhost/UploadProgress 或者 http://localhost/MagickWand,然后开始播放 !
  • 注意 :每次更改 PHP.ini 之后,必须重新启动 Apache。

黑客安全 Webprogramming

今天,非常重要的主题是:

  • 如何编写安全防御黑客攻击的代码?
  • 如何正确配置PHP服务器?
  • 什么是僵尸网络我的服务器如何被它们滥用?
  • 如何安装病毒扫描程序?
  • 如何远程检查服务器的漏洞?
  • 我是否可以学习黑客以及如何战胜它?

我写了一篇关于的详细文章服务器安全
强烈推荐你阅读本文所写的全文
在这里你还可以在PHP和ASP中下载一个收费的脚本。

web Webservices

你可能还对我的文章中关于CodeProject服务器服务器 and 服务器和客户端的感兴趣。


ext  PHP  USE  extensions  PHP扩展  
相关文章