php教程 php手册 PHP的十个高级技巧(下)

PHP的十个高级技巧(下)

Jun 21, 2016 am 09:13 AM
image java php quot

高级|技巧

六、动态图像的创建
  只要安装一些第三方的库文件并具有一定的几何知识,就可以利用PHP来创建和处理图像了。事实上,这不需要太多的几何知识,因为我大学没有毕业,仍然可以利用PHP创建图像。

  在使用基本的图像创建函数之前,需要安装GD库文件。如果要使用与JPEG有关的图像创建函数,还需要安装jpeg-6b,如果要在图像中使用Type 1型字体,则必须安装t1lib。

  在建立图像创建环境之前,还需要作一些准备工作。首先,安装t1lib;其次安装jpeg-6b,然后再安装GD库文件。在安装时一定要按这里给定的顺序进行安装,因为在编译GD为库时会用到jpeg-6b,如果没有安装jpeg-6b,在编译时就会出错。

  在安装完这三个组件后,还需要重新配置PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一。运行make clean,然后在当前的配置中添加下面的内容:

  --with-gd=[/path/to/gd]
  --with-jpeg-dir=[/path/to/jpeg-6b]
  --with-t1lib=[/path/to/t1lib]
  完成添加后执行make命令,然后再执行make install命令。重新启动Apache后运行phpinfo()来检查一下新的设置是否生效了。现在就可以开始图像创建工作了。

  根据所安装的GD库文件的版本不同,你也许能或者不能创建GIF或PNG格式的图形文件,如果安装的是gd-1.6或以前的版本,可以使用GIF格式的文件但不能创建PNG格式,如果安装的是gd-1.6以后的版本,可以创建PNG文件但不能创建GIF格式的文件。

  创建一幅简单的图像也需要用到许多的函数,我们将一步一步地进行说明。

  在这个例子中,我们将创建一个PNG格式的图像文件,下面的代码是一个包含所创建的图像的MIME类型的头部:

   header ("Content-type: image/png");

  使用ImageCreate()创建一个代表空白图像的变量,这个函数要求以像素为单位的图像大小的参数,其格式是ImageCreate(x_size, y_size)。如果要创建一个大小为250X250的图像,就可以使用下面的语句:

  $newImg = ImageCreate(250,250);

  由于图像还是空白的,因此你可能会希望用一些彩色来填充它。然而,你需要首先使用ImageColorAllocate()函数用其RGB值为这种颜色指定一个名字,这一函数的格式为ImageColorAllocate([image], [red], [green], [blue])。如果要定义天蓝色,可以使用如下的语句:

  $skyblue = ImageColorAllocate($newImg,136,193,255);

  接下来,需要使用ImageFill()函数用这种颜色填充这个图像,ImageFill()函数有几个版本,例如ImageFillRectangle()、ImageFillPolygon()等。为简单起见,我们通过如下的格式使用ImageFill()函数:

  ImageFill([image], [start x point], [start y point], [color])
  ImageFill($newImg,0,0,$skyblue);

  最后,建立图像后释放图像句柄和所占用的内存:

  ImagePNG($newImg);
  ImageDestroy($newImg); ?>

  这样,创建图像的全部代码如下所示:

   header ("Content-type: image/png");
  $newImg = ImageCreate(250,250);
  $skyblue = ImageColorAllocate($newImg,136,193,255);
  ImageFill($newImg,0,0,$skyblue);
  ImagePNG($newImg);
  ImageDestroy($newImg);
  ?>

  如果把这个脚本文件保存为skyblue.php,并用浏览器访问它,就会看到一个天蓝色的250X250的PNG格式的图像。

  我们还可以使用图像创建函数对图像进行处理,例如把一个较大图像作成一个小图像:
  假设你有一幅图像,想从中裁剪出一个35X35大小的图像。你所需要作的是创建一个35X35大小的空白图像,创建一个包含原来图像的图像流,然后把一个经过调整大小的原来的图像放到新的空白图像中。
  要完成这一任务的关健函数是ImageCopyResized(),它要求的格式如下所示:

ImageCopyResized([new image handle],
[original image handle],
[new image X],
[new Image Y],
[original image X],
[original image Y],
[new image X], [new image Y],
[original image X],
[original image Y])

   /* 发送一个头部,以便让浏览器知道该文件所包含的内容类型*/
  header("Content-type: image/png");
  /* 建立保存新图像高度和宽度的变量*/
  $newWidth = 35;
  $newHeight = 35;
  /* 建立给定高度和宽度的新的空白图像*/
  $newImg = ImageCreate($newWidth,$newHeight);
  /* 从原来较大的图像中得到数据*/
  $origImg = ImageCreateFromPNG("test.png");
  /*拷贝调整大小后的图像,使用ImageSX()、ImageSY()得到原来的图像在X、Y方面上的大小 */
  ImageCopyResized($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg));
 /*创建希望得到的图像,释放内存 */
  ImagePNG($newImg);
  ImageDestroy($newImg); ?>

  如果把这一小段脚本保存为resized.php,然后用浏览器对它进行访问,就会看到一个35X35大小的PNG格式的图形。

七、基于PHP的用户认证

  如果希望在每一段脚本上都进行口令保护,可以结合使用header()语句、$PHP_AUTH_USER和$PHP_AUTH_PW来建立基本的认证方案,通常的基于服务器的提问/响应顺序都如下所示:

  1、用户从服务器上请求一个文件。如果这个文件在服务器上是被保护的,则在响应的头部向用户返回一个401(示经授权的用户)字符串。
  2、浏览器收到这个响应后,弹出要求用户输入用户名/口令的对话框。
  3、用户在对话框中输入一个用户名和口令,点击OK按钮将信息返回服务器供认证使用。
  4、如果用户名和口令有效,被保护的文件将向用户开放,只要用户还在使用文件,认证会一直有效。

  一段简单的PHP脚本文件通过向用户发送一个适当的能够引起自动显示用户名/口令对话框的HTTP头部就可以模仿HTTP的提问/响应系统,PHP把用户在用户名/口令对话框中输入的信息存储在$PHP_AUTH_USER和$PHP_AUTH_PW中,使用这二个变量,就可以与存储在文本文件、数据库等文件中的用户名/口令进行比较。

  这个例子采用了二个硬编码的值进行认证,但无论用户名和口令放在什么地方,其原理都是相同的。

  
  /* 检查$PHP_AUTH_USER和$PHP_AUTH_PW中的值*/
  if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) {
  /* 如果没有值,则发送一个能够引发对话框出现的头部*/
  header('WWW-Authenticate: Basic realm="My Private Stuff"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Authorization Required.';
  exit;
  } else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){
  /* 变量中有值,检查它们是否正确*/
  if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
  /* 如果输入的用户名和口令中有一个不正确,则发送一个能够引发对话框出现的头部 */
  header('WWW-Authenticate: Basic realm="My Private Stuff"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Authorization Required.';
  exit;
  } else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) {
  /* 如果二个值都正确,显示成功的信息 */
  echo "

You're authorized!

";
  }
  }
  ?>

  需要注意的是,如果你使用的是基于文件的保护机制,它并不能保证目录中所有的文件的安全。它可能保护大部分的文件,如果你认为它能够保护给定目录中的所有文件,你的这种认识就需要变变了。

八、PHP和COM
  如果你喜欢冒险,并且在Windows上运行CGI、ISAPI或Apache模块版本的PHP,就可以访问COM的函数。好了,详细解释COM的工作就交给微软和许多大部头的书了,为了能简单地了解一下COM的功能,下面是一小段常见的脚本。

  这一段PHP脚本在后端启动微软的字处理Word,打开一个新的文档,输入一些文字,保存文档,并关闭Word。
  
  // 建立一个指向新COM组件的索引
  $word = new COM("word.application") or die("Can't start Word!");
  // 显示目前正在使用的Word的版本号
  echo "Loading Word, v. {$word->Version}
";
  // 把它的可见性设置为0(假),如果要使它在最前端打开,使用1(真)
  // to open the application in the forefront, use 1 (true)
  $word->Visible = 0;
  // 在Word中创建新的文档
  $word->Documents->Add();
  // 在新文档中添加文字
  $word->Selection->TypeText("Testing 1-2-3...");
  //把文档保存在Windows临时目录中
  $word->Documents[1]->SaveAs("/Windows/temp/comtest.doc");
  // 关闭与COM组件之间的连接
  $word->Quit();
  // 在屏幕上显示其他信息
  echo "Check for the file...";
  ?>
  如果你有一个intranet网站,数据存储在SQL Server中,用户需要这些数据的Excel格式,则可以让PHP运行必要的SQL查询并对输出进行格式化,然后利用COM打开Excel,把数据转化为Excel格式的数据,然后把数据保存在用户的台式机上。

九、PHP和Java
  PHP另一个有趣的功能是它可以调用现有的Java 对象中的方法,使得你可以在基于Java的应用中集成PHP。如果要在工作中推广PHP的应用,这一功能就非常有用了,你得到的结果是,“这里的一切都是基于Java的。”
  要利用这一功能,你的服务器上必须安装有JVM(Java虚拟机器)。如果安装的是由Sun、Kaffe、IBM或Blackdown的JDK,就已经安装有了JVM。

  在配置PHP时,需要在配置文件中添加with-java小节,然后修改php.ini文件中的一部分,对php.ini文件的修改主要是需要添加下面的内容:

  [Java]
  java.library.path=/path/to/library
  java.class.path=/classpath/
  extension_dir=/path/to/extensions
  extension=libphp_java.so

  需要注意的是,所作的修改与你的安装类型有关,你需要阅读PHP安装目录下ext/java目录中README文件,学习如何配置Java功能。

  下面是一段如何创建一个新的Java对象的PHP脚本的例子,这段脚本将访问并在显示器是显示一些Java属性。它与COM的例子同样有趣,应该会给我们一些启发。
  
  $system = new Java("java.lang.System");
  echo "

Java version = " . $system->getProperty("java.version") . "
";
  echo "Java vendor = " . $system->getProperty("java.vendor") . "

";
  ?>
  如果你有Java知识,将会对开发工作带来很大的帮助,这种集成的能力是未来PHP被接受和增长的关健。

十、PHP和XML
  PHP中包含有一个可选的支持Expat解析的XML扩展,利用PHP中与XML相关的函数,可以创建一个分析程序来处理有效的XML文档。如果你使用的是1.3.7版或版本更高的Apache软件,就不需要再安装额外的库文件了,你所需要作的就只是配置PHP中的with-xml。

  象Java和COM一样,PHP中对XML的支持也很有趣,而且增长也很快,如果你了解Expat或LibXML,请加入这一方面的开发吧。



본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열로 모음을 계산하는 PHP 프로그램 문자열로 모음을 계산하는 PHP 프로그램 Feb 07, 2025 pm 12:12 PM

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. Apr 05, 2025 am 12:04 AM

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). Apr 03, 2025 am 12:04 AM

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? Apr 03, 2025 am 12:03 AM

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.

See all articles