Kết nối thư viện php. Nguyên tắc kết nối file trong PHP. Kết nối thư viện CURL trong PHP

Igor Guzey

Đây không phải là hướng dẫn hành động chính xác và dứt khoát bằng cách sử dụng các thuật ngữ chính xác và các phương án tối ưu. Đây giống như một bản ghi của vấn đề hiện tại.

Nhiệm vụ: Thêm mô-đun/hỗ trợ GD2 vào PHP

Như thường lệ, chúng tôi bắt đầu đào tạo trên máy tính cục bộ và tất nhiên nó chạy trên Windows. Chính xác hơn là Windows XP SP2. Tiếp theo, hãy kết nối GD2 trong PHP, được định cấu hình qua cổng hoặc biên dịch thủ công cho FreeBSD.

Kết nối GD2 với PHP trên Windows

Chúng tôi tìm thấy trong phân phối:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
thư viện php_gd2.dll, tức là phiên bản 2.
và sao chép php_gd2.dll vào c:\windows
trong tệp c:\windows\php.ini, chúng tôi tìm thấy dòng mở rộng=php_gd2.dll và xóa nhận xét.
Khởi động lại Apache. Tất cả.

Nếu trước tiên bạn ngây thơ xóa nhận xét trong php.ini và nghĩ rằng thế là đủ, thì sau khi khởi động lại Apache, chẩn đoán sẽ xuất hiện:
"Không thể tải thư viện động "./php_gd.dll" - Không tìm thấy mô-đun được chỉ định."

Kết nối GD2 với PHP trong FreeBSD

PHP đã được cài đặt từ cổng

Chính xác hơn, không chỉ PHP mà nói chung mọi thứ (php, MySQL, Apache, ...) đều được cấu hình bằng cổng.

# cd /usr/ports/lang/php4-extensions # tạo cấu hình thêm hộp kiểm: "Hỗ trợ thư viện GD" # thực hiện gỡ cài đặt # thực hiện cài đặt lại # apachectl -k khởi động lại mềm duyên dáng hoặc # apachectl khởi động lại khởi động lại thô

PHP được biên dịch bằng tay

Trong trường hợp này, cần phải chuẩn bị sơ bộ JPEG và ZLIB

Cài đặt hỗ trợ JPEG

Tùy chọn có thể

JPEG từ cổng
# cd /usr/ports/graphics/jpeg # làm cho thư mục got hoạt động/jpeg-6b không thực hiện cài đặt
JPEG từ phân phối
# 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

Bạn cần cài đặt hỗ trợ zlib

Từ cảng
# cd /usr/ports/archivers/php4-zlib # làm cho các thư viện đã được cài đặt trong: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Xây dựng PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd mà không chỉ định thư mục Thư viện GD tích hợp trong PHP đã được cài đặt. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b nếu jpeg đến từ cổng hoặc /usr/dist/jpeg-6b nếu jpeg đến từ bản phân phối --with-zlib-dir =/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

Kiểm tra

gif.php:png.phpjpg.php:gd_info.php:
CHÌA KHÓA VAL$val) vang vọng "
phím $ $val"; ?>



Lỗi đã vượt qua

Khi cài đặt thư viện JPEG, sau khi "make", lệnh "make install" được thực hiện với mong muốn các tệp mới sẽ chuyển đến /usr/local và sau đó được tự động tìm thấy ở đó

# ./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

Nhưng vì lý do nào đó JPEG không kết nối được. Không có chẩn đoán âm tính và không có kết quả.

Vì ngu ngốc, tôi loay hoay như một con mèo mù, cố gắng diễn đạt thế này thế nọ. Hoặc thông qua mọi thứ được tích hợp sẵn, sau đó tải xuống, rồi từ cổng. Tất cả sự ô nhục này đi kèm với việc cài đặt không cần thiết, dẫn đến các vấn đề do có lỗi tại thời điểm cài đặt PHP:

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Cảm ơn bạn đã sử dụng PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: tham chiếu không xác định tới `gdImageRotate" trong khi thư mục dành cho GD dường như đã được chỉ định, nhưng chẩn đoán lại đề cập đến thư mục cài sẵn ./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 Cảm ơn bạn vì sử dụng PHP # thực hiện cài đặt ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: tham chiếu không xác định đến `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd /gd.c:1151 : tham chiếu không xác định đến `gdImageRotate" *** Mã lỗi 1

Cố gắng chuẩn bị tất cả các học phần riêng biệt và chỉ ra chúng một cách chính xác.

Một cặp kính...

PHP không có khung nhập tích hợp như python, java hoặc .net. Có một số cách để sử dụng thư viện trong PHP.

    biên dịch chúng thành một tệp nhị phân PHP. Đây là phương pháp tiên tiến nhất và thường không được khuyến khích trừ khi bạn có nhu cầu đặc biệt.

    Cài đặt chúng dưới dạng mô-đun PHP trên máy chủ và kích hoạt chúng trong PHP.ini. Từ quan điểm của một lập trình viên PHP, những phần mở rộng này là một phần của PHP - luôn có sẵn. Việc thêm và xóa sẽ dễ dàng hơn mà không cần phải xây dựng lại PHP.

    Cài đặt mã PHP trên máy chủ ở đâu đó và bao gồm() mã đó trong tập lệnh PHP của bạn.

    Lưu một bản sao của thư viện vào dự án của bạn và đưa nó vào tập lệnh PHP của bạn.

Ở cấp độ cơ bản, mã này là một phần của trình thông dịch (tĩnh hoặc động) hoặc nó là mã PHP cũ đơn giản bao gồm() ed trong dự án của bạn.

Vì mục đích của bạn, tôi chỉ có thể khuyên bạn nên sử dụng bản phân phối PHP tiêu chuẩn (chọn một hệ điều hành Linux tốt và sử dụng PHP đó). Sau đó, hầu hết tất cả các thư viện bạn cần ở cấp độ trình thông dịch đều có sẵn dưới dạng các gói bổ sung và sự phức tạp của nó sẽ được giao cho những người thực hiện việc đó hàng ngày.

Trên RedHat/Centos bạn có thể chạy:

yum cài đặt php php-memcached php-gd php-pecl

Trang Đối với tất cả các thư viện khác mà bạn có thể muốn sử dụng, có lẽ tốt nhất bạn nên sử dụng một khung công tác PHP tốt để giải quyết tất cả những điều này cho bạn.

Vài ví dụ:

  • Khung Zend
  • BánhPHP
  • Bộ mã hóa
  • Vân vân...

(không theo thứ tự nào cả, chỉ là những thứ tôi nghĩ đến thôi)

Miễn là bạn đã sử dụng cách tiếp cận tiêu chuẩn là sử dụng RPM hoặc tương tự để quản lý các khía cạnh mở rộng và PHP đã biên dịch, thì một khung công tác mạnh mẽ tốt sẽ đảm nhiệm việc bao gồm tất cả mã thư viện PHP bổ sung mà bạn cần.

Kết quả cuối cùng là: bạn tập trung vào việc cung cấp sản phẩm thay vì tất cả cơ sở hạ tầng mà lẽ ra bạn phải học hỏi và phát minh.

Trang php.ini được phân tích cú pháp và chạy khi PHP khởi động (mỗi lần cho dòng lệnh, một lần cho mỗi máy chủ chạy trong apache). Nó xác định nhiều cài đặt, bao gồm nhiều mô-đun, cấu hình các mô-đun đó, v.v.

Trên thực tế, bạn có thể ghi đè một số cài đặt trong php.ini bằng hàm ini_set() trong PHP. Tuy nhiên, điều này chỉ hoạt động đối với một số cài đặt. Những thứ khác phải được cài đặt trước khi chạy tập lệnh.

Khi làm việc với Apache, bạn có thể thêm dòng vào chỉ thị .htaccess và , ghi đè hoàn toàn PHP.ini cho thư mục/máy chủ ảo đó.

(vui lòng sửa cú pháp của tôi và xóa ghi chú này nếu nó sai)

Tên máy chủ www.example.com DocumentRoot /home/joe/site/docroot php_value include_path "/home/joe/site/php-code"

Trang Để trả lời câu hỏi số 6 của bạn về thư viện của riêng bạn và cách tốt nhất để đóng gói nó, tôi khuyên bạn trước tiên nên đánh giá nhu cầu về thư viện. Và nếu bạn làm điều gì đó, hãy tìm hiểu cách mọi người thường làm nhất. Nếu là thư viện đơn giản thì file .php với website tốt là đủ.

Trang Có thể hơi lan man một chút, nhưng tôi hy vọng điều này sẽ đưa bạn đi đúng hướng.

Lưu ý: Phiên bản thích ứng của trang web được kích hoạt, phiên bản này tự động thích ứng với kích thước nhỏ của trình duyệt của bạn và ẩn một số chi tiết của trang web để dễ đọc. Thích xem!

Chúc một ngày tốt lành cho tất cả người đọc blog Địa điểm TRÊN!

2 tháng gần đây công việc của tôi ở công ty liên quan chặt chẽ đến PHP thuần túy (việc sử dụng framework và CMS là điều cấm kỵ), tôi đã quên mất Joomla là gì rồi :) nên viết tiếp sẽ thích hợp hơn bao giờ hết cao hơn.

Hôm nay chúng ta sẽ nói về cách kết nối các tệp hoạt động trong PHP. Như bạn có thể nhận thấy, bất kỳ công cụ nào cho một trang web (Joomla, Wordpress, OpenCart, DLE và mọi thứ, mọi thứ, mọi thứ) đều bao gồm hàng nghìn tệp .php (và không chỉ php) và tất cả chúng đều tương tác với nhau, thực sự tạo thành nơi cơ chế làm việc.

  • Bây giờ, hãy quên các công cụ đi và tưởng tượng một ví dụ khác: chúng ta có nhiều trang trên trang web, mỗi trang có cùng một menu, đầu trang và chân trang của trang. Đương nhiên, chúng tôi sẽ không sao chép nội dung tương tự từ tệp này sang tệp khác, nếu không nó sẽ trở thành một trang HTML cổ từ những năm 90. Tối thiểu, chúng tôi sẽ chia mọi thứ thành 4 tệp:
  • index.php – phần chính của trang, file này sẽ thay đổi
  • menu.php – menu trang web
  • header.php – tiêu đề trang web

footer.php – chân trang của trang web

Ví dụ: ngoài trang chính (index.php), chúng tôi cũng có thể có các trang có danh sách sản phẩm (category.php) và các trang của chính sản phẩm đó (product.php). Sẽ rất thuận tiện khi kết nối các tệp menu.php, header.php, footer.php với các trang này. Nhờ cách tiếp cận này, nếu chúng tôi thêm một mục menu mới, chúng tôi sẽ chỉ thêm mục đó một lần (trong menu.php) chứ không phải 3 lần (trong index.php, Product.php, Category.php). Vì vậy câu hỏi đặt ra:"Làm cách nào để đính kèm tệp trong PHP?"

. Với mục đích này, có 2 hướng dẫn trong PHP:

Và các dẫn xuất của chúng:

Tôi lưu ý bạn rằng thực tế là include và require không phải là hàm, đây được gọi là cấu trúc ngôn ngữ, vì vậy không cần dấu ngoặc đơn.

Sự khác biệt giữa bao gồm và yêu cầu là gì bao gồm - điều này hoàn toàn giống nhau, với điểm khác biệt duy nhất là nếu có lỗi (ví dụ: nếu tệp được chỉ định không tồn tại và không thể đưa nó vào), include sẽ tạo ra lỗi như Cảnh báo, sau đó trang web sẽ tiếp tục hoạt động và yêu cầu sẽ phát hành, điều này sẽ dừng hoàn toàn việc tải trang tiếp theo.

Đó là, hướng dẫn yêu cầu triệt để và nghiêm ngặt hơn. Bạn có quyền quyết định sử dụng cái gì tốt nhất; nhìn chung, họ luôn khuyên bạn nên chọn một tùy chọn nghiêm ngặt hơn, tức là yêu cầu, nhưng cá nhân tôi thấy việc gõ từ bao gồm sẽ dễ chịu hơn :)

include_once và require_once – thực hiện tương tự như include (bao gồm một tệp), nhưng đồng thời họ đảm bảo rằng mỗi tệp được bao gồm không quá một lần. Chúng đặc biệt thuận tiện khi sử dụng nếu có nhiều người cùng làm việc trong một dự án và bạn cần đảm bảo rằng một tệp nhất định không được thêm vào nhiều lần.

Chú ý:

bao gồm_một lần bao gồm yêu cầu một lần– chậm hơn và tiêu tốn nhiều RAM hơn mức bao gồm và yêu cầu. Điều này là hợp lý vì họ phải nhớ tất cả các tệp đã được kết nối và mỗi khi kết nối, hãy kiểm tra xem tệp này đã được kết nối chưa.

Hãy để tôi minh họa rõ ràng cách hoạt động của các tệp kết nối trong PHP:

Khi kết nối các tệp (bất kỳ tệp nào, ví dụ: html, txt, php, xml, v.v.) với tập lệnh PHP, nội dung của chúng sẽ được chèn vào vị trí của tệp bao gồm một cách ngu ngốc. Nói cách khác, bao gồm (và tôi cũng có nghĩa là yêu cầu, vì chúng giống nhau) cũng giống như khi bạn sao chép mã (CTRL+C) từ đâu đó và dán (CTRL+V) vào một tệp (ví dụ: sản phẩm. php), sau đó được lưu và khởi chạy như bình thường: http://your_site.net/product.php

Để phân biệt các tệp chính, chẳng hạn như Product.php, với các tệp mà chúng tôi kết nối với nó (menu.php, header.php, footer.php), các tệp được kết nối được đổi tên như sau: menu.inc.php, header .inc.php , footer.inc.php. Nhờ đó, khi vào một thư mục, chúng ta sẽ thấy ngay đâu là các file chính và đâu là các file phụ.

Chú ý:

Kỹ thuật này (add inc) chỉ được sử dụng để thuận tiện cho việc nhìn và không mang bất kỳ sự khác biệt nào về chức năng. Nhưng sự tiện lợi về mặt thị giác cũng rất quan trọng, vì vậy hãy cố gắng luôn sắp xếp mọi thứ và thực hiện theo cùng một phong cách.

bao gồm với giá trị trả về

Ghi nhớ từ khóa? Vì vậy, trong PHP có một thứ hoang dã như return bên trong include. Tôi chưa bao giờ sử dụng cái này và tôi cũng chưa bao giờ thấy người khác sử dụng nó, nhưng điều đó là có thể, đây là some.php:

Kết nối some.php:

// In chuỗi: PHP ?>

Một số sự thật khác

  • Bạn có thể bao gồm các tệp ở bất kỳ đâu trong mã PHP, kể cả bên trong ;
  • Việc bao gồm (bao gồm) được kích hoạt trong quá trình thực thi tập lệnh; trước đó không có gì xảy ra trong các tệp được bao gồm;
  • Tệp được bao gồm có cùng dòng với dòng khai báo phần bao gồm. Nghĩa là, nếu ở đâu đó ở giữa một tệp thì phạm vi toàn cục và nếu ở bên trong một hàm thì là phạm vi cục bộ. Hãy để tôi nhấn mạnh một lần nữa rằng việc bao gồm cũng giống như khi bạn lấy và sao chép mã vào một tệp thay cho bao gồm.

Cảm ơn mọi người đã quan tâm và chúc cuối tuần vui vẻ!

Theo mặc định, tiện ích mở rộng để làm việc với MySQL (thư viện php_mysql.dll) không được kết nối với PHP và các chức năng tương ứng không khả dụng. Để kết nối thư viện, bạn cần thực hiện các thay đổi đối với tệp cấu hình php.ini và sao chép các thư viện bổ sung vào thư mục c:/windows/system32.

1. Cho PHP (Apache) biết vị trí của php.ini (chỉ dành cho Apache 2.x)

Nếu bạn đang sử dụng Apache phiên bản 2 trở lên, hãy nhớ thêm lệnh PHPIniDir vào tệp cấu hình Apache (httpd.conf), lệnh này cho phép bạn chỉ định vị trí chính xác của tệp php.ini. Sau khi thêm lệnh, hãy khởi động lại Apache và đảm bảo rằng quá trình khởi động đã thành công.

PHPIniDir “c:/php”

Ghi chú

Xin lưu ý rằng đường dẫn được viết bằng dấu gạch chéo lên /, điều này không bình thường đối với Windows, vốn sử dụng dấu gạch chéo ngược \\. Thực tế là cả Apache và PHP ban đầu được tạo ra để hoạt động trên các hệ thống Unix, nơi sử dụng dấu gạch chéo lên. Để tránh các sự cố khó chẩn đoán có thể xảy ra, chúng tôi thực sự khuyên bạn nên sử dụng dấu gạch chéo chuyển tiếp ở định dạng unix trong tệp cấu hình Apache và PHP.

Điều này giả định rằng tệp cấu hình php.ini được lưu trữ trong thư mục c:/php. Để đảm bảo rằng Apache đã tìm thấy tệp cấu hình php.ini, hãy chạy hàm phpinfo().

Xuất thông tin cấu hình PHP

echo phpinfo();
?>

Tìm giá trị hàng trong bảng màu tím kết quả "Đường dẫn tệp cấu hình (php.ini)". Nó phải chỉ ra đường dẫn đến tệp php.ini được sử dụng, bao gồm cả tập tin đó. Nếu dòng này chỉ xác định một thư mục thì có nghĩa là Apache không thể tìm thấy tệp php.ini.

C:/php/php.ini // Đúng - đã tìm thấy và sử dụng php.ini
C:/windows/ // Sai - không tìm thấy php.ini

Ghi chú

Trong Apache, các phiên bản trước của lệnh PHPIniDir không tồn tại và do đó, rất nhiều lỗi đã xảy ra do vị trí của tệp php.ini không chính xác. Đối với Apache phiên bản 1.3, php.ini phải được đặt trong thư mục hệ thống Windows, thường là: c:/Windows. Sử dụng lệnh PHPIniDir trong Apache phiên bản 2 cho phép bạn giải quyết triệt để vấn đề này.

Khi bạn đã chắc chắn rằng Apache đang sử dụng đúng php.ini, bạn có thể bắt đầu chỉnh sửa nó để kích hoạt tiện ích mở rộng MySQL.

2. Thiết lập chỉ thị Extension_dir trong PHP.INI

Lệnh Extension_dir chỉ định thư mục chứa các thư viện tiện ích mở rộng php, bao gồm thư viện php_mysql.dll. Nếu bạn đã cài đặt php trong thư mục c:/php thì các thư viện tiện ích mở rộng thường nằm trong thư mục con ext (c:/php/ext). Kiểm tra xem điều này có đúng không và đặt lệnh Extension_dir thành giá trị chính xác.

Extension_dir = "c:/php/ext"

3. Kết nối tiện ích mở rộng để làm việc với MySQL

Để thực hiện việc này, hãy tìm dòng trong php.ini:

;phần mở rộng=php_mysql.dll

Và xóa biểu tượng nhận xét khỏi nó - dấu chấm phẩy.

Tiện ích mở rộng=php_mysql.dll

4. Sao chép thư viện bổ sung libmysql.dll vào c:/windows

Nếu bạn đã kết nối PHP với Apache dưới dạng mô-đun, thì để kết nối tiện ích mở rộng MySQL, bạn cần sao chép thư viện bổ sung libmysql.dll từ thư mục c:/php sang thư mục c:/windows/system32. Nếu php được kết nối với Apache dưới dạng ứng dụng CGI thì không cần phải sao chép thư viện bổ sung.

5. Khởi động lại Apache

Khởi động lại Apache để mọi thay đổi có hiệu lực.

6. Kiểm tra cài đặt tiện ích mở rộng

Để đảm bảo rằng thư viện MySQL đã kết nối thành công với PHP, hãy chạy hàm phpinfo(). Xem qua "các bảng màu tím" và tìm một phần trong đó có tên là MySQL. Nếu phần như vậy tồn tại, điều đó có nghĩa là tiện ích mở rộng đã được kết nối thành công.

Kiểm tra sự tương tác của PHP với MySQL

1. Kiểm tra xem máy chủ MySQL của bạn có đang chạy không.

Trước khi bạn bắt đầu kiểm tra sự tương tác của PHP với MySQL, hãy đảm bảo rằng máy chủ MySQL của bạn đang chạy. Điều này có thể được thực hiện bằng cách mở danh sách các dịch vụ Windows: "Bắt đầu" | "Bảng điều khiển" | "Quản trị" | "Dịch vụ". Tìm dịch vụ có tên MySQL và đảm bảo dịch vụ đó ở trạng thái hoạt động (cột thứ ba của bảng).

Cách thứ hai để đảm bảo rằng máy chủ MySQL đang chạy: nhấn các nút “Crtl” + “Alt” + “Del” và trong tab “Processes”, tìm quy trình có tên mysqld.exe. Các quy trình sau đây cũng có thể hoạt động thay vì quy trình mysqld.exe: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Chạy tập lệnh php thử nghiệm

$dblocation = "127.0.0.1" ;
$dbname = "kiểm tra" ;
$dbuser = "gốc" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
nếu (! $dbcnx )
{
tiếng vọng "" ;
lối ra();
}
nếu như (!

{
tiếng vọng "" ;
lối ra();
}

if(!$ver)
{
tiếng vọng "

Lỗi trong yêu cầu

" ;
lối ra();
}
tiếng vọng
mysql_result($ver, 0);
?>

Nếu kiểm tra thành công, số phiên bản của máy chủ MySQL sẽ được hiển thị trên màn hình. Nếu không, mô tả về lỗi xảy ra sẽ được hiển thị trên màn hình.

Lỗi khi kết nối tiện ích mở rộng để làm việc với MySQL

Các lỗi như: Gọi tới hàm không xác định

Tất cả các lỗi chứa cụm từ “Gọi tới hàm không xác định” đều biểu thị phần mở rộng PHP chưa được kết nối. Nếu những lỗi như vậy xảy ra khi làm việc với các hàm MySQL, điều này có nghĩa là thư viện PHP để làm việc với MySQL - php_mysql.dll - không được bao gồm

Thông báo lỗi ví dụ:

Lỗi nghiêm trọng: Gọi hàm không xác định mysql_connect()

Để giải quyết vấn đề này, vui lòng tham khảo phần đầu của bài viết.

Không có khối MySQL trong phpinfo()

Nếu mọi thứ được thực hiện chính xác nhưng tiện ích mở rộng để làm việc với MySQL không kết nối và thậm chí khối MySQL bị thiếu trong đầu ra của hàm phpinfo(), thì hãy kiểm tra phiên bản của thư viện libmysql.dll nằm trong c:/windows/ hệ thống32.

  1. So sánh kích thước của thư viện libmysql.dll, nằm trong c:/windows/system32, với kích thước của thư viện cùng tên, được cài đặt bằng PHP. Họ phải bình đẳng.
  2. Xác định vị trí các thư viện libmysql.dll thông qua thư mục c:/windows và tất cả các thư mục con. Xóa tất cả các bản sao được tìm thấy và chỉ để lại một thư viện cần thiết - thư viện đã được sao chép từ thư mục c:/php.

Ghi chú

Thư viện libmysql.dll cùng tên cũng được cung cấp cùng với máy chủ MySQL. Tuy nhiên, đây là các thư viện khác nhau và nếu thư mục c:/windows/system32 chứa thư viện từ MySQL thì PHP sẽ không thể kết nối tiện ích mở rộng. Thư viện libmysql.dll có thể được tự động sao chép vào c:/windows/system32 khi cài đặt máy chủ MySQL. Sự hiện diện của thư viện từ phiên bản PHP cũ trong thư mục hệ thống cũng có thể trở thành một trở ngại.

Trang tập lệnh kiểm tra trống

Tập lệnh hiển thị trong danh sách bên dưới thường được sử dụng làm tập lệnh để kiểm tra sự tương tác của PHP với MySQL trên trang web của chúng tôi. Điểm khác biệt của nó so với tập lệnh PHP tương tự được đưa ra ở đầu bài viết là các ký hiệu @ trước khi gọi các hàm mysql_connect() và mysql_select_db(). Những ký tự này được sử dụng để ngăn chặn lỗi xuất ra trình duyệt. Chúng rất hữu ích khi sử dụng trên một trang web đang hoạt động trên Internet để ngăn thông tin bí mật hiển thị trên trình duyệt, nhưng khi gỡ lỗi các tập lệnh, việc cấm xuất ra lỗi là không cần thiết, bởi vì nó có thể gây khó khăn cho việc chẩn đoán vấn đề.

Tập lệnh PHP kiểm tra tương tác PHP với máy chủ MySQL

$dblocation = "127.0.0.1" ;
$dbname = "kiểm tra" ;
$dbuser = "gốc" ;
$dbpasswd = "" ;

$dbcnx = @mysql_connect ($dblocation, $dbuser, $dbpasswd);
nếu (! $dbcnx )
{
tiếng vọng "

Thật không may, máy chủ mySQL không có sẵn

" ;
lối ra();
}
nếu như (!@
mysql_select_db ($dbname, $dbcnx))
{
tiếng vọng "

Thật không may, cơ sở dữ liệu không có sẵn

"
;
lối ra();
}
$ver = mysql_query("CHỌN PHIÊN BẢN()" );
if(!$ver)
{
tiếng vọng "

Lỗi trong yêu cầu

"
;
lối ra();
}
tiếng vọng
mysql_result($ver, 0);
?>

Nếu do thực thi tập lệnh này, một trang trống được hiển thị, thì theo quy luật, điều này có nghĩa là thư viện php_mysql.dll không được kết nối với PHP. Để chẩn đoán chính xác hơn sự cố, hãy thực hiện chuỗi hành động sau.

  1. Đảm bảo rằng các tập lệnh PHP khác không sử dụng cơ sở dữ liệu MySQL đang chạy.
  2. Xóa biểu tượng @ trước khi gọi các hàm mysql_connect và mysql_select, được sử dụng để ngăn chặn lỗi xuất ra trình duyệt. Sau đó, thông tin đầy đủ hơn về lỗi sẽ được hiển thị trong trình duyệt, điều này sẽ giúp giải quyết vấn đề.

Lỗi: Không thể kết nối với máy chủ MySQL trên "127.0.0.1" (10061)

Nếu khi thực thi tập lệnh kiểm tra PHP, một lỗi tương tự như sau sẽ hiển thị:


Không thể kết nối với máy chủ MySQL trên "127.0.0.1" (10061)
trong C:\www\panel\htdocs\test.php trên dòng 7

Điều này cho thấy máy chủ cơ sở dữ liệu MySQL không chạy. Chẩn đoán chính xác hơn về vấn đề này được đưa ra ở đoạn 1 của tiểu mục “Kiểm tra sự tương tác của PHP với MySQL”.

Lỗi: Quyền truy cập bị từ chối đối với người dùng "root"@"localhost" (sử dụng mật khẩu: CÓ)

Đang gặp lỗi sau:

Cảnh báo: mysql_connect() :
Quyền truy cập bị từ chối đối với người dùng "root"@"localhost" (sử dụng mật khẩu: CÓ)
trong C:\www\panel\htdocs\test.php trên dòng 7

Cho biết rằng bạn đang cố gắng kết nối với cơ sở dữ liệu MySQL bằng mật khẩu không chính xác. Kiểm tra giá trị của biến $dbpasswd trong tập lệnh kiểm tra. Theo mặc định, máy chủ MySQL được cài đặt với mật khẩu người dùng root trống. Nếu bạn tự đặt mật khẩu cho người dùng root thì hãy ghi mật khẩu đó vào biến $dbpasswd của tập lệnh xác minh.

Bạn có thể hỏi bất kỳ câu hỏi nào về việc kết nối với các tiện ích mở rộng PHP để hoạt động trên diễn đàn của chúng tôi dành riêng cho việc cài đặt và định cấu hình các thư viện Apache, PHP và tiện ích mở rộng.

Tôi đề nghị nói một chút về ngôn ngữ lập trình PHP và đặc biệt đề cập đến chủ đề tiện ích mở rộng XOĂN, I E. khả năng tương tác với các máy chủ khác nhau bằng các giao thức khác nhau từ chính tập lệnh PHP.

Trước khi bắt đầu xem xét về Curl, tôi muốn nhắc bạn rằng chúng ta đã đề cập đến ngôn ngữ PHP, chẳng hạn như trong tài liệu về tải lên Excel bằng PHP hoặc khả năng xác thực trong PHP, và bây giờ hãy nói về khả năng gửi yêu cầu tới PHP.

CURL là gì?

XOĂN là một thư viện chứa các hàm PHP có thể được sử dụng để gửi các yêu cầu, chẳng hạn như HTTP, từ tập lệnh PHP. CURL hỗ trợ các giao thức như HTTP, HTTPS, FTP và các giao thức khác. Bạn có thể gửi yêu cầu HTTP bằng các phương thức GET, POST và PUT.

CURL có thể hữu ích trong trường hợp bạn cần gọi một tập lệnh từ xa và nhận kết quả hoặc chỉ cần lưu mã HTML của trang được gọi, nói chung, mọi người đều có thể tìm thấy cách sử dụng của riêng mình, nhưng vấn đề là bạn có thể gửi yêu cầu trong khi tập lệnh đang chạy.

Kết nối thư viện CURL trong PHP

Để sử dụng thư viện CURL, bạn cần kết nối nó cho phù hợp.

Ghi chú! Ví dụ: chúng tôi sẽ sử dụng PHP 5.4.39 trên Windows 7 và chúng tôi sẽ sử dụng Apache 2.2.22 làm máy chủ Web.

Điều đầu tiên bạn cần làm là sao chép các thư viện ssleay32.dll, libeay32.dll, libssh2.dll chúng nằm trong thư mục có PHP, trong thư mục hệ thống Windows, cụ thể là trong C:\Windows\System32.

Sau đó kết nối thư viện php_curl.dll với php.ini, tức là. bỏ ghi chú dòng tiếp theo

Thư viện chưa được kết nối

;phần mở rộng=php_curl.dll

Đã kết nối thư viện

Tiện ích mở rộng=php_curl.dll

Vậy là xong, khởi động lại Apache, gọi hàm phpinfo() và nếu kết nối thành công thì bạn sẽ có phần cuộn tròn


Nếu nó không có ở đó thì điều này chỉ có nghĩa là một điều: thư viện không tải; lý do phổ biến nhất cho việc này là các tệp DLL ở trên không được sao chép vào thư mục hệ thống Windows.

Ví dụ về CURL - yêu cầu một trang từ xa hiển thị trên màn hình

Trong ví dụ này, chúng tôi sẽ chỉ yêu cầu một trang từ xa qua HTTP bằng phương thức GET và hiển thị nội dung của nó trên màn hình.

Chúng tôi có một thư mục test trong đó có 2 tệp PHP: test_curl.php và test.php, trong đó test_curl.php là tập lệnh mà chúng tôi sẽ sử dụng Curl và test.php là tập lệnh từ xa mà chúng tôi sẽ gọi. Tôi đã nhận xét mã một cách chi tiết.

Mã test_curl.php

Mã test.php

Tiêu đề 1"; ngắt; trường hợp 2: echo "<Н2>Tiêu đề 2"; ngắt; trường hợp 3: echo "<Н3>Tiêu đề 3"; nghỉ; ) ) ?>

Kết quả nếu chạy test_curl.php bạn sẽ thấy trên màn hình có thông báo “Heading 1”, bạn có thể thử nghiệm truyền tham số id ( trong trường hợp này là 2 hoặc 3).

Ví dụ về CURL - gọi tập lệnh từ xa và nhận kết quả

Bây giờ chúng ta hãy thử gọi tập lệnh và nhận kết quả, để xử lý nó sau, ví dụ: hãy sử dụng phương thức POST. Hãy để tên tập tin giống nhau.

Mã test_curl.php

Mã test.php

Và nếu chúng tôi chạy test_curl.php, thì 111 sẽ được hiển thị trên màn hình, tức là. 1.11 thu được do truy cập tập lệnh từ xa, nhân với 100.

Bây giờ hãy nói về hàm và hằng số của chúng.

Các hàm và hằng CURL thường được sử dụng

  • Curl_init - Khởi tạo một phiên;
  • Curl_close - Đóng phiên;
  • Curl_exec - Thực hiện một yêu cầu;
  • Curl_errno - Trả về mã lỗi;
  • Curl_setopt - Đặt tham số cho phiên, ví dụ:
    • CURLOPT_HEADER – giá trị 1 có nghĩa là tiêu đề sẽ được trả về;
    • CURLOPT_INFILESIZE - tham số để chỉ định kích thước tệp dự kiến;
    • CURLOPT_VERBOSE - giá trị 1 có nghĩa là CURL sẽ hiển thị thông báo chi tiết về tất cả các thao tác được thực hiện;
    • CURLOPT_NOPROGRESS – vô hiệu hóa chỉ báo tiến trình hoạt động, giá trị 1;
    • CURLOPT_NOBODY – nếu bạn không cần tài liệu mà chỉ cần tiêu đề, thì đặt giá trị thành 1;
    • CURLOPT_UPLOAD - để tải tệp lên máy chủ;
    • CURLOPT_POST – thực hiện yêu cầu bằng phương thức POST;
    • CURLOPT_FTPLISTONLY - lấy danh sách các tệp trong thư mục máy chủ FTP, giá trị 1;
    • CURLOPT_PUT - thực hiện yêu cầu bằng phương thức PUT, giá trị 1;
    • CURLOPT_RETURNTRANSFER - trả về kết quả mà không xuất ra trình duyệt, giá trị 1;
    • CURLOPT_TIMEOUT – thời gian thực hiện tối đa tính bằng giây;
    • CURLOPT_URL – chỉ định địa chỉ liên hệ;
    • CURLOPT_USERPWD - một chuỗi có tên người dùng và mật khẩu ở dạng :;
    • CURLOPT_POSTFIELDS – dữ liệu cho yêu cầu POST;
    • CURLOPT_REFERER - đặt giá trị của tiêu đề HTTP “Người giới thiệu:”;
    • CURLOPT_USERAGENT - đặt giá trị của tiêu đề HTTP “Tác nhân người dùng:”;
    • CURLOPT_COOKIE - nội dung của tiêu đề “Cookie:” sẽ được gửi cùng với yêu cầu HTTP;
    • CURLOPT_SSLCERT - tên tệp có chứng chỉ ở định dạng PEM;
    • CURLOPT_SSL_VERIFYPEER – giá trị 0, để tắt xác minh chứng chỉ máy chủ từ xa (mặc định 1);
    • CURLOPT_SSLCERTPASSWD - mật khẩu cho tệp chứng chỉ.
  • Curl_getinfo - Trả về thông tin về thao tác, tham số thứ hai có thể là hằng số để cho biết chính xác những gì cần hiển thị, ví dụ:
    • CURLINFO_EFFECTIVE_URL - URL được sử dụng lần cuối;
    • CURLINFO_HTTP_CODE - mã HTTP nhận được lần cuối;
    • CURLINFO_FILETIME - ngày sửa đổi của tài liệu được tải;
    • CURLINFO_TOTAL_TIME — thời gian thực hiện thao tác tính bằng giây;
    • CURLINFO_NAMELOOKUP_TIME — thời gian phân giải tên máy chủ tính bằng giây;
    • CURLINFO_CONNECT_TIME — thời gian thiết lập kết nối, tính bằng giây;
    • CURLINFO_PRETRANSFER_TIME - thời gian trôi qua từ khi bắt đầu hoạt động cho đến khi sẵn sàng truyền dữ liệu thực tế, tính bằng giây;
    • CURLINFO_STARTTRANSFER_TIME — thời gian trôi qua kể từ khi bắt đầu thao tác cho đến khi byte dữ liệu đầu tiên được truyền, tính bằng giây;
    • CURLINFO_REDIRECT_TIME — thời gian dành cho việc chuyển hướng, tính bằng giây;
    • CURLINFO_SIZE_UPLOAD - số byte khi tải lên;
    • CURLINFO_SIZE_DOWNLOAD - số byte khi tải xuống;
    • CURLINFO_SPEED_DOWNLOAD - tốc độ tải xuống trung bình;
    • CURLINFO_SPEED_UPLOAD - tốc độ tải xuống trung bình;
    • CURLINFO_HEADER_SIZE - tổng kích thước của tất cả các tiêu đề nhận được;
    • CURLINFO_REQUEST_SIZE - tổng kích thước của tất cả các yêu cầu đã gửi;
    • CURLINFO_SSL_VERIFYRESULT - kết quả của việc kiểm tra chứng chỉ SSL được yêu cầu bằng cách đặt tham số CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - kích thước của tài liệu đã tải xuống, đọc từ tiêu đề Độ dài nội dung;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - kích thước của dữ liệu được tải lên;
    • CURLINFO_CONTENT_TYPE - nội dung của tiêu đề Loại nội dung đã nhận hoặc NULL nếu tiêu đề này không được nhận.

Bạn có thể tìm hiểu thêm về các hàm và hằng CURL cho chúng trên trang web chính thức của PHP -