PHP에서 파일을 연결하는 원리. PHP CURL - 반환 값과 함께 포함하는 함수 및 사용 예




안경 한쌍...

PHP에는 Python, Java 또는 .net과 같은 내장 가져오기 프레임워크가 없습니다. PHP에서 라이브러리를 사용하는 방법에는 여러 가지가 있습니다.

    PHP 바이너리로 컴파일합니다. 이는 가장 발전된 방법이며 특별한 요구 사항이 없는 한 일반적으로 바람직하지 않습니다.

    서버에 PHP 모듈로 설치하고 PHP.ini에서 활성화합니다. PHP 프로그래머의 관점에서 볼 때 이러한 확장은 PHP의 일부이므로 항상 사용할 수 있습니다. PHP 자체를 다시 빌드하지 않고도 추가하고 제거하는 것이 더 쉽습니다.

    PHP 코드를 서버 어딘가에 설치하고 PHP 스크립트에 포함()하세요.

    라이브러리 복사본을 프로젝트에 저장하고 PHP 스크립트에 포함하세요.

페이지 기본 수준에서 코드는 인터프리터(정적 또는 동적)의 일부이거나 프로젝트에 include() 가 포함된 기존의 일반 PHP 코드입니다.

귀하의 목적을 위해 저는 표준 PHP 배포판을 고수할 것을 제안할 뿐입니다(좋은 Linux OS를 선택하고 해당 PHP를 사용하십시오). 그러면 인터프리터 수준에서 필요한 거의 모든 라이브러리가 추가 기능 패키지로 제공되며 그 복잡성은 매일 수행하는 사람들에게 맡겨집니다.

RedHat/Centos에서는 다음을 실행할 수 있습니다.

냠 설치 PHP php-memcached php-gd php-pecl

페이지 사용하고 싶은 다른 모든 라이브러리와 마찬가지로 이 모든 것을 처리할 수 있는 좋은 PHP 프레임워크를 사용하는 것이 가장 좋습니다.

몇 가지 예:

  • Zend 프레임워크
  • 케이크PHP
  • 코드이그나이터
  • 등...

(순서는 아니고 생각나는 순서대로)

PHP 및 확장 측면에서 컴파일된 것을 관리하기 위해 표준 RPM 접근 방식이나 이와 유사한 방법을 사용했다면 훌륭하고 강력한 프레임워크가 필요한 모든 추가 PHP 라이브러리 코드를 포함하는 작업을 처리할 것입니다.

최종 결과는 무엇입니까? 배우고 발명해야 하는 전체 인프라가 아닌 제품 제공에 중점을 둡니다.

php.ini 페이지는 PHP 시작 시 구문 분석되고 실행됩니다(명령줄의 경우 매번, 서버당 한 번씩 Apache에서 실행됨). 이는 많은 설정을 정의하고, 많은 모듈을 포함하고, 해당 모듈을 구성하는 등의 작업을 수행합니다.

실제로, PHP의 ini_set() 함수를 사용하여 php.ini의 일부 설정을 무시할 수 있습니다. 그러나 이는 일부 설정에서만 작동합니다. 다른 것들은 스크립트를 실행하기 전에 설정해야 합니다.

Apache에서 실행할 때 .htaccess 지시문에 줄을 추가할 수 있으며 이는 해당 디렉토리/가상 호스트에 대해 PHP.ini를 완전히 재정의합니다.

(제 구문을 수정하고 잘못된 경우 이 메모를 삭제하세요.)

서버 이름 www.example.com DocumentRoot /home/joe/site/docroot php_value include_path "/home/joe/site/php-code"

페이지 자신의 라이브러리와 이를 패키징하는 가장 좋은 방법에 대한 질문 #6에 대한 응답으로 먼저 라이브러리의 필요성을 평가할 것을 제안합니다. 그리고 당신이 정말로 어떤 일을 한다면 사람들이 그 일을 하는 가장 일반적인 방식을 찾아보세요. 간단한 라이브러리라면 좋은 웹사이트가 포함된 .php 파일이면 충분합니다.

페이지 다소 장황할 수도 있지만 이것이 올바른 방향을 제시해주기를 바랍니다.

기본적으로 MySQL 작업을 위한 확장(php_mysql.dll 라이브러리)은 PHP에 연결되어 있지 않으며 해당 기능을 사용할 수 없습니다. 라이브러리를 연결하려면 php.ini 구성 파일을 변경하고 추가 라이브러리를 c:/windows/system32 디렉터리에 복사해야 합니다.

1. PHP(Apache)에게 php.ini가 어디에 있는지 알려줍니다(Apache 2.x에만 해당).

Apache 버전 2 이상을 사용하는 경우 Apache 구성 파일(httpd.conf)에 PHPIniDir 지시어를 추가해야 합니다. 이를 통해 php.ini 파일의 정확한 위치를 지정할 수 있습니다. 지시어를 추가한 후 Apache를 다시 시작하고 시작이 성공했는지 확인합니다.

PHPIniDir "c:/php"

메모

백슬래시 \\를 사용하는 Windows에서는 일반적이지 않은 경로를 작성할 때 슬래시 /가 사용됩니다. 사실 Apache와 PHP는 원래 슬래시가 사용되는 Unix 시스템에서 작동하도록 설계되었습니다. 진단하기 어려운 문제를 방지하려면 Apache 및 PHP 구성 파일에서 Unix 형식의 슬래시를 사용하는 것이 좋습니다.

이는 php.ini 구성 파일이 c:/php 디렉토리에 저장되어 있다고 가정합니다. Apache가 php.ini 구성 파일을 찾았는지 확인하려면 phpinfo() 함수를 실행하세요.

PHP 구성 정보 인쇄

에코 phpinfo();
?>

결과 보라색 테이블에서 행 값을 찾습니다. "구성 파일(php.ini) 경로". 여기에는 사용된 php.ini 파일의 경로가 포함되어야 합니다. 파일 자체를 포함하여. 이 줄에 디렉토리만 나열되어 있으면 Apache가 php.ini 파일을 찾을 수 없다는 의미입니다.

C:/php/php.ini // 정확함 - php.ini를 찾아서 사용함
C:/windows/ // 틀렸습니다 - php.ini를 찾을 수 없습니다

메모

이전 버전의 Apache에서는 PHPIniDir 지시어가 없었기 때문에 php.ini 파일의 잘못된 위치와 관련된 오류가 많이 발생했습니다. Apache 버전 1.3의 경우 php.ini는 Windows 시스템 디렉터리(일반적으로 c:/Windows)에 있어야 합니다. Apache 버전 2에서 PHPIniDir 지시문을 사용하면 이 문제가 근본적으로 해결됩니다.

Apache가 올바른 php.ini를 사용하고 있는지 확인한 후 편집을 시작하여 MySQL 확장을 연결할 수 있습니다.

2. PHP.INI에서 Extension_dir 지시문을 설정합니다.

Extension_dir 지시문은 php_mysql.dll 라이브러리를 포함하여 php 확장 라이브러리가 있는 디렉터리를 지정합니다. c:/php 디렉토리에 php를 설치했다면 확장 라이브러리는 일반적으로 ext 하위 디렉토리(c:/php/ext)에 위치합니다. 이런 경우인지 확인하고 Extension_dir 지시문의 올바른 값을 설정하십시오.

Extension_dir = "c:/php/ext"

3. MySQL과 함께 작동하도록 확장 프로그램을 연결합니다.

이렇게 하려면 php.ini에서 다음 줄을 찾으세요.

;확장자=php_mysql.dll

그리고 주석 기호(세미콜론)를 제거하십시오.

확장자=php_mysql.dll

4. 추가 라이브러리 libmysql.dll을 c:/windows에 복사합니다.

PHP가 Apache에 모듈로 연결되어 있는 경우 MySQL 확장을 연결하려면 c:/php 디렉터리에서 c:/windows/system32 디렉터리로 추가 라이브러리 libmysql.dll을 복사해야 합니다. PHP가 CGI 애플리케이션으로 Apache에 연결된 경우 추가 라이브러리를 복사할 필요가 없습니다.

5. 아파치 다시 로드

모든 변경 사항을 적용하려면 Apache를 다시 로드하세요.

6. 확장 프로그램 설치 확인

MySQL 라이브러리가 PHP에 성공적으로 연결되었는지 확인하려면 phpinfo() 함수를 실행하십시오. "보라색 테이블"을 살펴보고 MySQL이라는 섹션을 찾으세요. 해당 섹션이 존재하면 확장 프로그램이 성공적으로 연결되었음을 의미합니다.

MySQL과 PHP의 상호작용 확인

1. MySQL 서버가 실행 중인지 확인하세요.

PHP와 MySQL 간의 상호 작용을 확인하기 전에 MySQL 서버가 실행 중인지 확인하세요. Windows 서비스 목록을 열어 이 작업을 수행할 수 있습니다. "시작" | "제어판" | "행정" | "서비스". MySQL이라는 서비스를 찾아 실행 상태인지 확인합니다(표의 세 번째 열).

MySQL 서버가 실행 중인지 확인하는 두 번째 방법은 "Crtl" + "Alt" + "Del" 버튼을 누르고 "프로세스" 탭에서 mysqld.exe라는 프로세스를 찾는 것입니다. mysqld.exe 프로세스 대신 mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe 프로세스도 실행할 수 있습니다.

2. 테스트 PHP 스크립트 실행

$dblocation = "127.0.0.1" ;
$dbname = "테스트" ;
$dbuser = "루트" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
만약 (! $dbcnx )
{
에코 "" ;
출구();
}
만약에 (!

{
에코 "" ;
출구();
}

if(! $ver )
{
에코 "

요청 오류

" ;
출구();
}
에코
mysql_result($ver , 0 );
?>

테스트가 성공하면 MySQL 서버의 버전 번호가 표시됩니다. 그렇지 않으면 발생한 오류에 대한 설명이 화면에 표시됩니다.

MySQL과 함께 작동하도록 확장 프로그램을 연결할 때 오류가 발생합니다.

다음과 같은 오류: 정의되지 않은 함수 호출

"정의되지 않은 함수 호출"이라는 문구가 포함된 모든 오류는 연결되지 않은 PHP 확장을 가리킵니다. MySQL 함수로 작업할 때 이러한 오류가 발생하면 이는 MySQL 작업을 위한 PHP 라이브러리(php_mysql.dll)가 연결되지 않았음을 의미합니다.

오류 메시지 예:

치명적인 오류: 정의되지 않은 함수 mysql_connect() 호출

이 문제에 대한 해결 방법은 문서의 시작 부분을 참조하세요.

phpinfo()에 MySQL 블록이 없습니다.

모든 작업이 올바르게 수행되었지만 MySQL 확장이 연결되지 않고 phpinfo() 함수의 출력에 MySQL 블록조차 누락된 경우 c:/windows/system32에 있는 libmysql.dll 라이브러리의 버전을 확인하세요.

  1. c:/windows/system32에 있는 libmysql.dll 라이브러리의 크기와 PHP와 함께 설치된 동일한 이름의 라이브러리 크기를 비교하십시오. 그들은 동일해야 합니다.
  2. libmysql.dll 라이브러리를 c:/windows 디렉터리 및 모든 하위 디렉터리로 이동합니다. 발견된 모든 중복 항목을 삭제하고 필수 라이브러리 하나만 남겨두십시오. 해당 라이브러리는 c:/php 디렉토리에서 복사되었습니다.

메모

동일한 이름의 libmysql.dll 라이브러리도 MySQL 서버와 함께 제공됩니다. 그러나 이들은 서로 다른 라이브러리이므로 MySQL 라이브러리가 c:/windows/system32 디렉터리에 있으면 PHP는 확장 프로그램을 연결할 수 없습니다. libmysql.dll 라이브러리는 MySQL 서버가 설치되면 자동으로 c:/windows/system32에 복사될 수 있습니다. 이전 버전의 PHP 라이브러리가 시스템 디렉터리에 존재하는 경우에도 장애가 될 수 있습니다.

테스트 스크립트의 클린 페이지

아래 목록에 표시된 스크립트는 당사 사이트에서 PHP와 MySQL 간의 상호 작용을 확인하기 위한 스크립트로 자주 사용됩니다. 기사 시작 부분에 제공된 유사한 PHP 스크립트와의 차이점은 mysql_connect() 및 mysql_select_db() 함수를 호출하기 전의 @ 기호입니다. 이러한 문자는 브라우저에 오류 출력을 억제하는 데 사용됩니다. 기밀 정보가 브라우저에 표시되는 것을 방지하기 위해 인터넷의 라이브 사이트에서 사용하는 것이 유용하지만 스크립트를 디버깅할 때 오류 출력을 비활성화할 필요는 없습니다. 문제를 진단하기가 어려워질 수 있습니다.

MySQL 서버와의 PHP 통신을 확인하는 PHP 스크립트

$dblocation = "127.0.0.1" ;
$dbname = "테스트" ;
$dbuser = "루트" ;
$dbpasswd = "" ;

$dbcnx = @ mysql_connect ($dblocation, $dbuser, $dbpasswd);
만약 (! $dbcnx )
{
에코 "

죄송합니다. mySQL 서버를 사용할 수 없습니다.

" ;
출구();
}
만약에 (!@
mysql_select_db ($dbname , $dbcnx ))
{
에코 "

불행히도 데이터베이스를 사용할 수 없습니다.

"
;
출구();
}
$ver = mysql_query("SELECT VERSION()");
if(! $ver )
{
에코 "

요청 오류

"
;
출구();
}
에코
mysql_result($ver , 0 );
?>

이 스크립트를 실행한 결과 빈 페이지가 표시되면 일반적으로 php_mysql.dll 라이브러리가 PHP에 연결되지 않았음을 의미합니다. 문제를 보다 정확하게 진단하려면 다음 작업을 순서대로 수행하십시오.

  1. MySQL 데이터베이스를 사용하지 않는 다른 PHP 스크립트를 실행하고 있는지 확인하십시오.
  2. 브라우저에 오류 출력을 억제하는 데 사용되는 mysql_connect 및 mysql_select를 호출하기 전에 @ 기호를 제거하십시오. 그 후에는 더 완전한 오류 정보가 브라우저에 표시되어 문제 해결에 도움이 됩니다.

오류: "127.0.0.1"(10061)에서 MySQL 서버에 연결할 수 없습니다.

테스트 PHP 스크립트를 실행할 때 다음과 유사한 오류가 생성되는 경우:


"127.0.0.1"(10061)에서 MySQL 서버에 연결할 수 없습니다.
7행의 C:\www\panel\htdocs\test.php에서

이는 MySQL 데이터베이스 서버가 실행되고 있지 않음을 나타냅니다. 이 문제에 대한 보다 정확한 진단은 "PHP와 MySQL 간의 상호 작용 확인" 하위 섹션의 단락 1에 나와 있습니다.

오류: 사용자 "root"@"localhost"에 대한 액세스가 거부되었습니다(비밀번호 사용: YES).

다음 오류가 있습니다.

경고: mysql_connect():
사용자 "root"@"localhost"에 대한 액세스가 거부되었습니다(비밀번호 사용: YES).
7행의 C:\www\panel\htdocs\test.php에서

잘못된 비밀번호로 MySQL 데이터베이스에 연결을 시도하고 있음을 나타냅니다. 테스트 스크립트에서 $dbpasswd 변수의 값을 확인하십시오. 기본적으로 MySQL 서버는 빈 루트 사용자 비밀번호로 설치됩니다. 루트 사용자의 비밀번호를 직접 설정한 경우 check 스크립트의 $dbpasswd 변수에 추가하세요.

작업할 PHP 확장 연결에 대해 궁금한 점이 있으면 Apache, PHP 및 확장 라이브러리 설치 및 구성 전용 포럼에 질문할 수 있습니다.

참고 사항:사이트의 적응형 버전이 활성화되어 브라우저의 작은 크기에 자동으로 조정되고 쉽게 읽을 수 있도록 사이트의 일부 세부 정보가 숨겨집니다. 즐겁게 시청하세요!

모든 블로그 독자들에게 좋은 하루 되세요 대지에! 지난 2개월 동안 회사에서 제가 하는 일은 순수한 PHP와 밀접하게 관련되어 있습니다(프레임워크 및 CMS 사용은 금기입니다). 저는 이미 Joomla가 무엇인지 잊어버렸습니다. :) 항상.

오늘은 PHP에서 파일이 연결되는 방법에 대해 이야기하겠습니다. 아시다시피, 사이트의 모든 엔진(Joomla, Wordpress, OpenCart, DLE 및 모든 것, 모든 것, 모든 것)은 수천 개의 .php(PHP뿐만 아니라) 파일로 구성되며 모두 서로 상호 작용합니다. 작업 현장의 메커니즘.

이제 엔진은 잊어버리고 또 다른 예를 상상해 보세요. 사이트에 많은 페이지가 있고 각 페이지에는 동일한 메뉴, 사이트 머리글 및 바닥글이 있습니다. 당연히 우리는 파일에서 파일로 동일한 것을 복사하지 않을 것입니다. 그렇지 않으면 90년대의 고대 HTML 사이트로 판명되었을 것입니다. 최소한 모든 내용을 4개의 파일로 나눕니다.

  • index.php - 페이지의 주요 부분으로, 이 파일은 변경됩니다.
  • menu.php - 사이트 메뉴
  • header.php - 사이트 헤더
  • footer.php - 사이트 바닥글

예를 들어 메인 페이지(index.php) 외에도 제품 목록이 포함된 페이지(category.php)와 제품 자체 페이지(product.php)도 있을 수 있습니다. menu.php, header.php, footer.php 파일을 이 페이지에 연결하면 편리합니다. 이 접근 방식 덕분에 새 메뉴 항목을 추가하면 해당 항목을 세 번(index.php, product.php, Category.php에서) 추가하지 않고 한 번(menu.php에서)만 추가하게 됩니다.

따라서 다음과 같은 질문이 생깁니다. "PHP에서 파일을 첨부하는 방법은 무엇입니까?". 이 목적을 위해 PHP에는 두 가지 지침이 있습니다.

그리고 그 파생상품은 다음과 같습니다.

include와 require는 함수가 아니라 소위 언어 구조이므로 대괄호가 필요하지 않다는 사실에 주목하겠습니다.

포함과 요구의 차이점은 무엇입니까

포함하다그리고 필요하다- 이것은 완전히 동일합니다. 유일한 차이점은 오류가 발생하는 경우(예: 지정된 파일이 존재하지 않고 연결할 수 없는 경우) include가 다음과 같은 오류를 반환한다는 것입니다. 경고, 그 이후에는 사이트가 계속 작동하고 require 가 실행되어 추가 페이지 로딩이 완전히 중단됩니다.

즉, 요구 지시가 더 급진적이고 엄격합니다. 어느 것이 더 나은지 결정하는 것은 귀하의 몫입니다. 대체로 항상 더 엄격한 옵션, 즉 요구 사항을 선택하는 것이 좋지만 개인적으로는 include라는 단어를 입력하는 것이 더 즐겁습니다. :)

include_once 및 require_once는 include(파일 포함)와 동일한 작업을 수행하지만 동시에 각 파일이 한 번만 포함되도록 합니다. 여러 사람이 하나의 프로젝트에 참여하고 있고 일부 파일이 여러 번 추가되지 않았는지 확인해야 하는 경우 특히 유용합니다.

주목:

include_once그리고 require_once- 포함 및 요구보다 느리게 작동하고 더 많은 RAM을 소비합니다. 이는 논리적이며 연결된 모든 파일을 기억해야 하고 연결할 때마다 이 파일이 이미 연결되었는지 확인해야 하기 때문입니다.

PHP에서 파일 연결이 어떻게 작동하는지 설명하겠습니다.

파일(예: html, txt, php, xml 등)을 포함할 때 PHP 스크립트의 내용은 포함 위치에 어리석게 삽입됩니다. 즉, 포함(동일하기 때문에 요구한다는 뜻이기도 함)은 어딘가에서 코드를 복사(CTRL+C)하여 파일(예: product.php)에 붙여넣는(CTRL+V) 것과 같습니다. 그런 다음 평소와 같이 저장하고 실행하십시오. http://yoursite.net/product.php

product.php와 같은 기본 파일을 여기에 포함된 파일(menu.php, header.php, footer.php)과 구별하기 위해 포함된 파일의 이름은 menu.inc.php, header로 변경됩니다. inc.php, footer.inc.php. 덕분에 폴더에 들어가면 기본 파일이 어디에 있는지, 보조 파일이 어디에 있는지 즉시 확인할 수 있습니다.

주목:

이 기술(inc 추가)은 시각적 편의를 위해서만 사용되며 기능적 차이는 없습니다. 하지만 시각적인 편리함도 매우 중요하므로 항상 동일한 스타일로 구성하고 모든 작업을 수행하도록 노력하세요.

반환 값에 포함

키워드를 기억하시나요? 따라서 PHP에는 포함 내부의 반환과 같은 놀라운 일이 있습니다. 나는 그것을 사용한 적이 없고 다른 사람들이 그것을 사용하는 것을 본 적이 없지만 가능합니다. some.php 예를 유지하십시오:

some.php를 포함합니다:

// 출력 문자열: PHP ?>

추가 사실

  • 내부를 포함하여 PHP 코드의 어느 곳에나 파일을 포함할 수 있습니다.
  • 연결(포함)은 스크립트 실행 중에 트리거되며 포함된 파일에서는 사전에 아무 일도 일어나지 않습니다.
  • 포함된 파일은 포함이 선언된 줄과 동일합니다. 즉, 파일 중간에 있으면 전역 범위이고, 함수 내부에 있으면 로컬 범위입니다. 다시 한 번 강조하지만, include 대신 코드를 파일에 복사한 경우에는 include가 동일합니다.

관심 가져주신 모든 분들께 감사드리며, 즐거운 주말 보내세요!

이고르 구제이

이는 올바른 용어와 최상의 옵션을 사용한 조치에 대한 정확하고 최종적인 지침이 아닙니다. 오히려 현재 문제에 대한 기록입니다.

작업: PHP에 GD2 지원/모듈 추가

평소와 같이 Windows에서 작동하는 로컬 컴퓨터에서 교육을 시작합니다. 보다 정확하게는 Windows XP SP2입니다. 다음으로 포트를 통해 구성되거나 FreeBSD에서 수동으로 빌드된 PHP에서 GD2를 연결합니다.

Windows에서 GD2를 PHP에 연결하기

우리는 분포에서 다음을 발견합니다:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
php_gd2.dll 라이브러리, 즉 버전 2.
php_gd2.dll을 c:\windows에 복사하세요.
c:\windows\php.ini 파일에서 Extension=php_gd2.dll 줄을 찾아 주석을 제거합니다.
아파치를 재부팅하십시오. 모두.

먼저 php.ini에서 주석을 순진하게 제거하고 이것이 충분하다고 생각하면 Apache를 다시 시작한 후 진단이 나타납니다.
"동적 라이브러리 "./php_gd.dll"을 로드할 수 없습니다. - 지정된 모듈을 찾을 수 없습니다."

FreeBSD에서 GD2를 PHP에 연결하기

PHP는 이미 포트에서 설치되었습니다.

보다 정확하게는 PHP뿐만 아니라 일반적으로 모든 것(php, MySQL, Apache 등)이 포트를 사용하여 구성되었습니다.

# cd /usr/ports/lang/php4-extensions # make config 체크 표시 추가: "GD 라이브러리 지원" # make deinstall # make 재설치 # apachectl -k Graceful Soft restart 또는 # apachectl restart hard restart

PHP를 손으로 만들었습니다.

이 경우 JPEG, ZLIB 준비를 위한 사전 작업이 필요합니다.

JPEG 지원 설정

가능한 옵션

포트의 JPEG
# cd /usr/ports/graphics/jpeg # make 디렉토리 work/jpeg-6b make install을 하지 않음
배포의 JPEG
# cd /usr/dist/ # wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # gunzip -c jpegsrc.v6b.tar.gz | tar xf - # cd /usr/dist/jpeg-6b # ./configure # make

zlib 지원을 설치해야 함

항구에서
# cd /usr/ports/archivers/php4-zlib # make 라이브러리가 다음 위치에 설치되었습니다: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

PHP 구축

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd 디렉토리 설치 없이 PHP에 내장된 GD 라이브러리. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b jpeg가 포트에서 온 경우 또는 jpeg가 배포에서 온 경우 /usr/dist/jpeg-6b --with-zlib-dir=/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

테스트

gif.php:png.phpjpg.php:gd_info.php:
열쇠 $val) 에코 "
$키 $발"; ?>



전달된 오류

JPEG 라이브러리를 설치할 때 "make" 후에 "make install" 명령은 새 파일이 /usr/local로 이동한 다음 자동으로 그곳에서 발견될 것이라는 예상으로 수행되었습니다.

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd --with-jpeg-dir --with-zlib-dir= /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

하지만 어떤 이유로 JPEG가 연결되지 않았습니다. 음성 진단도 없었고 결과도 없었다.

어리석게도 나는 이렇게, 저렇게 말하려고 눈 먼 새끼 고양이처럼 찔렀다. 내장된 모든 것을 통해, 다운로드한 다음 포트를 통해. 이 모든 불명예에는 불필요한 설치가 수반되어 PHP 설치 시 오류가 발생하는 오버레이가 발생했습니다.

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local PHP를 사용해 주셔서 감사합니다. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: `gdImageRotate"에 대한 정의되지 않은 참조 이것은 GD용 디렉토리를 나타내는 것처럼 보이지만 진단에서는 내장 디렉토리를 참조합니다. # ./configure - -with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/usr /local --with -png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules ... / usr/dist/php-4.4.4/ext/gd/gd.c:837: `gdImageColorMatch"에 대한 정의되지 않은 참조 /usr/dist/php-4.4.4/ext/gd/gd.c:1151: 다음에 대한 정의되지 않은 참조 `gdImageRotate" *** 오류 코드 1

모든 모듈을 개별적으로 준비하고 정확하게 가리키려고 노력합니다.

저는 PHP 프로그래밍 언어에 대해 조금 이야기하고 특히 확장 기능에 대한 주제를 다룰 것을 제안합니다. 곱슬 곱슬하다, 즉. PHP 스크립트 자체와 다른 프로토콜을 사용하여 다른 서버와 상호 작용하는 기능.

컬에 대한 고려를 진행하기 전에 예를 들어 PHP에서 Excel에 업로드하거나 PHP에서 인증하는 기능에 대한 자료에서 이미 PHP 언어를 다루었으며 이제 기능에 대해 이야기하겠습니다. PHP에 요청을 보냅니다.

CURL이란 무엇입니까?

곱슬 곱슬하다 PHP 스크립트에서 HTTP와 같은 요청을 보낼 수 있는 PHP 함수 라이브러리입니다. CURL은 HTTP, HTTPS, FTP 등과 같은 프로토콜을 지원합니다. GET, POST, PUT 메서드를 사용하여 HTTP 요청을 보낼 수 있습니다.

CURL은 원격 스크립트를 호출하여 결과를 얻거나 호출되는 페이지의 HTML 코드를 저장해야 하는 경우에 유용할 수 있습니다. 일반적으로 모든 사람이 자신의 용도를 찾을 수 있지만 요점은 도중에 요청을 보낼 수 있다는 것입니다. 스크립트 실행.

PHP에 CURL 라이브러리 포함

CURL 라이브러리를 사용하려면 그에 따라 이를 포함해야 합니다.

메모! 예제로는 Windows 7에서 PHP 5.4.39를 사용하고 웹 서버로 Apache 2.2.22를 사용합니다.

가장 먼저 할 일은 라이브러리를 복사하는 것입니다. ssleay32.dll, libeay32.dll, libssh2.dll이는 PHP가 있는 디렉터리, Windows 시스템 디렉터리, 즉 다음 위치에 있습니다. C:\Windows\System32.

그런 다음 php.ini에서 php_curl.dll 라이브러리를 연결합니다. 다음 줄의 주석 처리를 해제하세요

라이브러리가 연결되지 않았습니다

;확장자=php_curl.dll

도서관이 연결됨

확장자=php_curl.dll

그게 다입니다. Apache를 다시 시작하고 phpinfo() 함수를 호출하면 연결에 성공하면 컬 섹션이 있어야 합니다.


거기에 없으면 이는 라이브러리가 로드되지 않았다는 것을 의미합니다. 가장 일반적인 이유는 위의 DLL이 Windows 시스템 디렉터리에 복사되지 않았기 때문입니다.

CURL 예제 - 표시할 원격 페이지 요청

이 예에서는 HTTP GET 메서드를 통해 원격 페이지를 요청하고 해당 내용을 화면에 표시합니다.

그 안에 테스트 디렉터리가 있고, 2개의 PHP 파일은 test_curl.php와 test.php입니다. 여기서 test_curl.php는 컬을 사용할 스크립트이고 test.php는 호출할 원격 스크립트입니다. 코드에 대해 자세히 설명했습니다.

test_curl.php 코드

test.php 코드

제목 1"; 중단; 사례 2: 에코 "<Н2>제목 2"; 중단; 사례 3: 에코 "<Н3>제목 3"; 휴식; ) ) ?>

결과적으로, test_curl.php를 실행하면 화면에 "제목 1"이라는 문구가 표시됩니다. id 매개변수 전달을 실험해 볼 수 있습니다( 이 경우에는 2 또는 3).

CURL 예 - 원격 스크립트를 호출하고 결과 얻기

이제 나중에 처리하기 위해 스크립트를 호출하고 결과를 가져오겠습니다. 예를 들어 POST 메서드를 사용해 보겠습니다. 파일 이름은 동일하게 유지하십시오.

test_curl.php 코드

test.php 코드

test_curl.php를 실행하면 화면에 111이 표시됩니다. 원격 스크립트 호출로 인한 결과 1.11에 100을 곱합니다.

이제 함수와 해당 상수에 대해 이야기해 보겠습니다.

일반적으로 사용되는 CURL 함수 및 상수

  • cur_init - 세션을 초기화합니다.
  • cur_close - 세션을 닫습니다.
  • 컬_exec - 요청을 실행합니다.
  • 컬_errno - 오류 코드를 반환합니다.
  • 컬_setopt - 세션에 대한 매개변수를 설정합니다. 예를 들면 다음과 같습니다.
    • CURLOPT_HEADER - 값 1은 헤더가 반환되어야 함을 의미합니다.
    • CURLOPT_INFILESIZE - 예상 파일 크기를 지정하기 위한 매개변수입니다.
    • CURLOPT_VERBOSE - 값 1은 CURL이 수행된 모든 작업에 대한 자세한 메시지를 표시함을 의미합니다.
    • CURLOPT_NOPROGRESS – 작업 진행률 표시기 비활성화, 값 1;
    • CURLOPT_NOBODY - 문서는 필요하지 않고 제목만 필요한 경우 값을 1로 설정합니다.
    • CURLOPT_UPLOAD - 서버에 파일을 업로드합니다.
    • CURLOPT_POST - POST 메소드를 사용하여 요청을 실행합니다.
    • CURLOPT_FTPLISTONLY - FTP 서버 디렉터리의 파일 목록 가져오기, 값 1;
    • CURLOPT_PUT — PUT 메서드, 값 1을 사용하여 요청을 실행합니다.
    • CURLOPT_RETURNTRANSFER - 브라우저에 표시하지 않고 결과를 반환합니다. 값은 1입니다.
    • CURLOPT_TIMEOUT - 최대 실행 시간(초)입니다.
    • CURLOPT_URL - 액세스할 주소를 지정합니다.
    • CURLOPT_USERPWD - 다음 형식의 사용자 이름과 비밀번호가 포함된 문자열입니다.
    • CURLOPT_POSTFIELDS - POST 요청에 대한 데이터입니다.
    • CURLOPT_REFERER - HTTP 헤더 "Referer: "의 값을 설정합니다.
    • CURLOPT_USERAGENT - HTTP 헤더 "User-Agent: "의 값을 설정합니다.
    • CURLOPT_COOKIE - HTTP 요청과 함께 전송될 "Cookie:" 헤더의 내용입니다.
    • CURLOPT_SSLCERT - PEM 형식의 인증서가 포함된 파일 이름입니다.
    • CURLOPT_SSL_VERIFYPEER - 값 0은 원격 서버 인증서 확인을 비활성화합니다(기본값 1).
    • CURLOPT_SSLCERTPASSWD는 인증서 파일의 비밀번호입니다.
  • 컬_getinfo - 작업에 대한 정보를 반환합니다. 두 번째 매개변수는 정확히 표시해야 하는 내용을 나타내는 상수일 수 있습니다. 예를 들면 다음과 같습니다.
    • CURLINFO_EFFECTIVE_URL - 마지막으로 사용한 URL입니다.
    • CURLINFO_HTTP_CODE - 마지막으로 수신된 HTTP 코드입니다.
    • CURLINFO_FILETIME - 로드된 문서의 수정 날짜입니다.
    • CURLINFO_TOTAL_TIME — 작업 실행 시간(초)입니다.
    • CURLINFO_NAMELOOKUP_TIME - 서버 이름 확인 시간(초)입니다.
    • CURLINFO_CONNECT_TIME - 연결을 설정하는 데 걸린 시간(초)입니다.
    • CURLINFO_PRETRANSFER_TIME - 작업 시작부터 실제 데이터 전송 준비까지 경과된 시간(초)입니다.
    • CURLINFO_STARTTRANSFER_TIME - 작업 시작부터 첫 번째 데이터 바이트 전송까지 경과된 시간(초)입니다.
    • CURLINFO_REDIRECT_TIME - 리디렉션하는 데 걸린 시간(초)입니다.
    • CURLINFO_SIZE_UPLOAD - 업로드 시 바이트 수.
    • CURLINFO_SIZE_DOWNLOAD - 다운로드 시 바이트 수입니다.
    • CURLINFO_SPEED_DOWNLOAD - 평균 다운로드 속도.
    • CURLINFO_SPEED_UPLOAD - 평균 업로드 속도.
    • CURLINFO_HEADER_SIZE - 수신된 모든 헤더의 총 크기입니다.
    • CURLINFO_REQUEST_SIZE - 전송된 모든 요청의 총 크기입니다.
    • CURLINFO_SSL_VERIFYRESULT CURLOPT_SSL_VERIFYPEER 매개변수를 설정하여 요청한 SSL 인증서 확인 결과입니다.
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD Content-Length 헤더에서 읽은 다운로드한 문서의 크기입니다.
    • CURLINFO_CONTENT_LENGTH_UPLOAD - 업로드된 데이터의 크기입니다.
    • CURLINFO_CONTENT_TYPE 수신된 Content-type 헤더의 내용이거나, 이 헤더가 수신되지 않은 경우 NULL입니다.

공식 PHP 웹사이트에서 CURL 함수와 상수에 대한 자세한 내용을 볼 수 있습니다.