Tin nhắn cảnh báo tiếng vang php

Rachel Andrew là nhà phát triển web, nhà văn và diễn giả. Cô ấy là tác giả của một số cuốn sách, bao gồm Bố cục CSS mới. Cô ấy là một trong những người đứng sau … Thông tin thêm về Rachel ↬

Bản tin email

Email [đập vỡ] của bạn

Mẹo hàng tuần về front-end & UX
Được hơn 200.000 người tin cậy

  • Giao diện người dùng SmashingConf 2023

  • Hệ thống thiết kế thành công

  • Danh sách kiểm tra thiết kế giao diện thông minh

  • Các mẫu thiết kế giao diện thông minh, khóa học 9h-video

PHP được phổ biến rộng rãi với các gói lưu trữ rẻ tiền, khiến nó trở thành lựa chọn phổ biến cho các nhà phát triển viết phần mềm cho Web. Từ các nền tảng lớn, chẳng hạn như WordPress, cho đến các tập lệnh nhỏ, chẳng hạn như tập lệnh để hiển thị thư viện hình ảnh hoặc gửi biểu mẫu tới email, hàng nghìn tập lệnh và sản phẩm được viết bằng PHP có thể được cài đặt và sử dụng ngay cả khi bạn không biết.

Tôi đã là nhà phát triển PHP được 10 năm và công ty của tôi đã phát triển một hệ thống quản lý nội dung, được viết bằng PHP, rất đơn giản để cài đặt và bắt đầu sử dụng. Vì vậy, tôi dành nhiều thời gian làm việc với các nhà thiết kế lần đầu tiên cài đặt tập lệnh PHP. Nếu bạn đang cài đặt một tập lệnh và xảy ra sự cố, PHP có thể vô cùng tức giận. Cho đến khi bạn biết ý nghĩa của chúng, các lỗi PHP có thể gây trở ngại. tin nhắn yêu thích của tôi là

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

Paamayim Nekudotayim có nghĩa là “dấu hai chấm” trong tiếng Do Thái. Nhưng

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
1 dễ gỡ lỗi hơn rất nhiều so với
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
2

Bài viết này dành cho các nhà thiết kế không phải là nhà phát triển PHP nhưng thỉnh thoảng cần cài đặt các tập lệnh PHP. Do đó, các sự cố và thông báo lỗi mà chúng tôi sẽ xem xét ở đây là những vấn đề bạn có thể gặp phải nhất khi cài đặt tập lệnh, thay vì khi viết PHP. Các mẹo này sẽ giúp bạn xử lý các thông báo lỗi khác và ít nhất sẽ giúp bạn cung cấp thông tin rõ ràng cho nhà phát triển tập lệnh nếu bạn cần yêu cầu họ hỗ trợ

Thêm sau khi nhảy. Tiếp tục đọc bên dưới ↓

Gặp Bản tin Email Smashing với các mẹo hữu ích về giao diện người dùng, thiết kế & UX. Đăng ký và nhận “Danh sách kiểm tra thiết kế giao diện thông minh” — một bộ tài liệu PDF miễn phí với hơn 150 câu hỏi để bạn tự hỏi mình khi thiết kế và xây dựng hầu hết mọi thứ

Email [đập vỡ] của bạn

Mỗi tuần một lần. Mẹo hữu ích về front-end & UX. Được tin cậy bởi 190. 000 người thân thiện

Đọc thêm trên SmashingMag.

  • PHP. Những điều bạn cần biết để chơi với web
  • 10 thủ thuật PHP nâng cao
  • 50 Công cụ PHP cực kỳ hữu ích

Tất cả những gì tôi nhận được là một trang trống

Trước khi chẩn đoán lỗi PHP, chúng ta cần xem một số lỗi PHP. Lý tưởng nhất là trước tiên bạn nên cài đặt tập lệnh cục bộ, có thể sử dụng MAMP trên máy Mac hoặc XAMPP, cả hai đều cho phép bạn bật thông báo lỗi một cách dễ dàng. Bạn có thể lấy PHP để chỉ ra các lỗi trực tiếp trên màn hình hoặc ghi chúng vào một tệp để xem

Tuy nhiên, nếu bạn đang cài đặt tập lệnh trực tiếp vào tài khoản dịch vụ lưu trữ của mình, máy chủ lưu trữ có thể đã vô hiệu hóa việc hiển thị tất cả các thông báo lỗi PHP. Điều này hợp lý để bảo mật, vì thông báo lỗi có thể làm lộ thông tin quan trọng về máy chủ hoặc cơ sở dữ liệu, nhưng nó không hữu ích lắm nếu bạn đang cố định cấu hình tập lệnh. Nếu các hiển thị lỗi đã bị tắt, thì một lỗi nghiêm trọng trước khi bất kỳ đầu ra nào được thực hiện trên trang sẽ dẫn đến một trang trống. Một lỗi xảy ra sau khi một số HTML đã được xuất ra sẽ dẫn đến việc đánh dấu bị "cắt" [dừng tại điểm xảy ra lỗi]. Nếu bạn “Xem nguồn” và thấy một trang hoàn toàn trống hoặc nửa trang hoặc đang gặp “lỗi máy chủ nội bộ 500”, thì lỗi PHP có thể là thủ phạm

Xác định vị trí Nhật ký lỗi

Trên máy chủ trực tiếp, bạn sẽ có quyền truy cập nhật ký lỗi PHP. Điều này khác với nhật ký lỗi máy chủ Web, hiển thị những thứ như lỗi 404 khi không tìm thấy trang hoặc hình ảnh. Nhật ký PHP cung cấp thông tin về các lỗi và cảnh báo trong chính PHP. Máy chủ nên cấu hình PHP để gửi lỗi vào nhật ký thay vì ghi chúng lên màn hình

Nếu không tìm thấy nhật ký lỗi, thì bạn có thể định cấu hình PHP để duy trì một bản ghi ở vị trí mà bạn chỉ định. Để làm điều này, hãy tạo một thư mục trên trang web của bạn có tên là

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
3. Làm cho thư mục này có thể ghi được. Sau đó thêm mã dưới đây vào. htaccess ở thư mục gốc của trang web của bạn. Nếu bạn không có. htaccess, hãy tạo một tệp

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log

Sau đó, bảo vệ thư mục

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
3 để tệp không thể tải xuống từ Web. Bạn có thể thực hiện việc này trong bảng điều khiển hoặc chỉ bằng cách tạo một trang mới. htaccess, lần này nằm trong thư mục
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
3

Order allow,deny
Deny from all

Nếu bây giờ bạn chạy tập lệnh gây ra lỗi, thông báo lỗi sẽ được thêm vào php_error. tệp nhật ký. Nếu nó không hoạt động, trước tiên hãy thử tự tạo tệp trong thư mục

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
3 và làm cho nó có thể ghi được

Nếu bạn không gặp may mắn khi tạo nhật ký lỗi, hãy mở một phiếu hỗ trợ với nhà cung cấp dịch vụ lưu trữ của bạn, giải thích những gì bạn đang cố gắng đạt được và hỏi cách thực hiện

Lỗi, Thông báo và Cảnh báo

PHP phân loại các thông báo đi đến nhật ký lỗi là lỗi, thông báo hoặc cảnh báo. Chúng có mức độ nghiêm trọng khác nhau. Một lỗi là một cái gì đó bị hỏng trong mã của bạn. Nó cần sửa và sẽ khiến PHP ngừng thực thi

Một cảnh báo về cơ bản là PHP nói rằng, “Những gì bạn đang làm có thể sẽ gây ra sự cố, nhưng tôi sẽ cố gắng tiếp tục. ”

Thông báo cho bạn biết điều gì đó cần chú ý trong tập lệnh của bạn. Có thể phiên bản PHP trên máy chủ của bạn mới hơn phiên bản được tập lệnh hỗ trợ. Mọi thứ trong PHP không được dùng nữa giống như cách các phần tử trong đặc tả HTML không được dùng nữa. Khi một cái gì đó không được dùng nữa, điều đó có nghĩa là nó sẽ bị xóa trong tương lai, vì vậy thông báo cho bạn biết điều này

Lỗi trong tập lệnh đã mua hoặc mã nguồn mở rất có thể là sự cố với cài đặt của bạn, giả sử rằng phiên bản PHP của bạn đáp ứng yêu cầu. Nếu một tập lệnh đưa ra các cảnh báo mà bạn không thể khắc phục, thì có lẽ bạn nên nêu chúng với bộ phận hỗ trợ kỹ thuật. Bạn thường có thể bỏ qua các thông báo, mặc dù bạn nên kiểm tra xem phiên bản mới nhất của tập lệnh đã được cài đặt chưa. Nếu nhiều thông báo bị loại bỏ, điều đó có thể cho thấy một tập lệnh kém chất lượng

Nếu thủ thuật bật ghi nhật ký lỗi ở trên hiệu quả với bạn, thì bạn có thể đặt mức báo cáo lỗi trong. htaccess cũng vậy

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1

Ở trên sẽ chỉ thêm lỗi vào

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
7

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting -1

Đặt

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
8 thành
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
9 sẽ ghi lại tất cả các lỗi, cảnh báo và thông báo. Nếu bạn làm điều này, thì chắc chắn bạn sẽ muốn đặt
Order allow,deny
Deny from all
0 thành
Order allow,deny
Deny from all
1, để các thông báo không được xuất ra các trang trên trang web của bạn

Lỗi đầu tiên là lỗi quan trọng

Nếu bạn đang hiển thị lỗi trên trang và gặp lỗi PHP, bạn có thể gặp phải một trang đầy lỗi đáng sợ. Nếu bạn đang xem lại lỗi trong nhật ký, hãy làm mới trang đang tạo ra lỗi rồi kiểm tra nhật ký. Bạn có thể tìm thấy một loạt lỗi cho cùng một trang; . Điều này thường xảy ra khi lỗi đầu tiên là cảnh báo; . Khắc phục cảnh báo ban đầu và bạn có thể thấy rằng tất cả các sự cố khác sẽ biến mất

Lỗi liên quan đến cơ sở dữ liệu

Nhiều lỗi mọi người gặp phải khi cài đặt tập lệnh liên quan đến kết nối với cơ sở dữ liệu. Thông thường, khi tập lệnh cần tạo kết nối cơ sở dữ liệu, bạn sẽ được yêu cầu cung cấp bốn bit thông tin. tên người dùng và mật khẩu của cơ sở dữ liệu, địa chỉ của máy chủ [thường là, nhưng không phải luôn luôn,

Order allow,deny
Deny from all
2] và tên của cơ sở dữ liệu. Nếu bất kỳ điều nào trong số này không chính xác, bạn sẽ không thể kết nối. Tùy thuộc vào tập lệnh, bạn sẽ thấy một chuỗi thông báo lỗi xấu hoặc nếu nhà phát triển đã xử lý việc này một cách khéo léo, bạn sẽ được thông báo rằng tập lệnh không thể kết nối với cơ sở dữ liệu

Các sự cố kết nối cơ sở dữ liệu mà tôi thường thấy khi cung cấp hỗ trợ kỹ thuật như sau

  • Người dùng đã nhập
    Order allow,deny
    Deny from all
    2 thay vì địa chỉ IP hoặc URL cho máy chủ cơ sở dữ liệu. Localhost có nghĩa là cơ sở dữ liệu nằm trên cùng một máy chủ với trang web của bạn. Một số máy chủ có các máy chủ khác nhau cho MySQL và do đó sẽ cung cấp cho bạn địa chỉ của máy chủ mà bạn cần sử dụng khi định cấu hình tập lệnh
  • Tên người dùng không chính xác đã được nhập. Một điều cần lưu ý là cPanel đặt tiền tố tên người dùng mà bạn tạo bằng tên tài khoản. Nếu tên tài khoản của bạn là
    Order allow,deny
    Deny from all
    4 và bạn tạo một người dùng có tên là
    Order allow,deny
    Deny from all
    5, thì tên người dùng cần nhập khi định cấu hình tập lệnh sẽ là
    Order allow,deny
    Deny from all
    6
  • Tên cơ sở dữ liệu không chính xác đã được nhập. Cũng như tên người dùng, cPanel đặt tiền tố tên cơ sở dữ liệu bằng tên tài khoản. Kiểm tra xem bạn có đang sử dụng phiên bản có tiền tố trong cấu hình của mình không

Sự cố về quyền cơ sở dữ liệu

Một nguyên nhân khác có thể gây ra sự cố liên quan đến cơ sở dữ liệu là khi tất cả các chi tiết kết nối đều chính xác, nhưng người dùng cơ sở dữ liệu không có quyền cần thiết để thực hiện những việc mà tập lệnh cần thực hiện. Ví dụ: tập lệnh có thể cần tạo bảng cơ sở dữ liệu và do đó sẽ yêu cầu người dùng cơ sở dữ liệu phải có quyền

Order allow,deny
Deny from all
7

Nếu bạn đã tạo người dùng cơ sở dữ liệu trong cPanel, bạn cũng cần chọn cơ sở dữ liệu và kết hợp người dùng với nó, cấp cho người dùng đủ quyền để chạy tập lệnh. Ví dụ: nếu bạn đang cài đặt WordPress, người dùng cơ sở dữ liệu của bạn sẽ cần phải có

Order allow,deny
Deny from all
8 cho cơ sở dữ liệu mà nó được đính kèm

Trong cPanel, bạn có thể thiết lập những thứ này trong phần có tên “Thêm người dùng vào cơ sở dữ liệu. ” Chọn người dùng và cơ sở dữ liệu, sau đó trên màn hình tiếp theo, nhấp vào hộp kiểm “Tất cả Đặc quyền” trước khi gửi biểu mẫu

Lỗi PHP

Nhóm lỗi tiếp theo là lỗi do PHP tạo ra do một số vấn đề với tập lệnh mà bạn đang cài đặt hoặc do thứ gì đó đã được đưa vào trong khi bạn đang cài đặt hoặc định cấu hình tập lệnh đó

Lỗi nghiêm trọng. Cuộc gọi không mục đích

Fatal error: Call to undefined function my_function[] in /home/mysite/public_html/test.php on line 2

Điều này có nghĩa là không thể tìm thấy chức năng PHP mà trang hiện tại cần. Hàm này có thể là một phần của chính tập lệnh hoặc được tích hợp ngay trong PHP. Bạn có thể thấy lỗi này khi cài đặt tập lệnh của bên thứ ba vì những lý do sau

  • Nếu bạn đang cài đặt một tập lệnh mới, có thể bạn chưa tải tất cả các tệp lên. Theo kinh nghiệm của tôi, những người sử dụng ứng dụng khách FTP của Dreamweaver gặp phải sự cố này rất nhiều
  • Nếu bạn đang nâng cấp, bạn có thể chưa thay thế tất cả các tệp được yêu cầu. Vì vậy, một phiên bản cũ không chứa chức năng đang được sử dụng
  • Bạn có thể chưa thêm một PHP bắt buộc bao gồm hoặc chỉ định một đường dẫn chính xác trong tệp cấu hình
  • Một tập lệnh có thể đang gọi một hàm PHP không khả dụng trên máy chủ này. Ví dụ: nó có thể đang gọi
    Order allow,deny
    Deny from all
    9 khi thư viện hình ảnh GD chưa được cài đặt

Để giải quyết lỗi, hãy kiểm tra cẩn thận xem tất cả các tệp đã được tải lên hoặc thay thế chưa và bạn đã làm theo hướng dẫn cài đặt chưa. Nếu bạn không thể giải quyết nó, hãy liên hệ với nhà phát triển tập lệnh, giải thích những gì bạn đã làm và những gì bạn đã kiểm tra và sao chép thông báo lỗi

Nếu vấn đề là thiếu thứ gì đó trong bản cài đặt PHP của bạn, thì bạn có thể cần liên hệ với nhà cung cấp dịch vụ lưu trữ của mình

Lỗi nghiêm trọng. Không thể tuyên bố lại

Fatal error: Cannot redeclare my_function[] [previously declared in /home/mysite/public_html/runtime.php:14] in /home/mysite/public_html/runtime.php on line 26

Điều này thường có nghĩa là bạn đã bao gồm một tệp hai lần. Kiểm tra mọi nơi bạn đã chỉnh sửa và kiểm tra các tệp được bao gồm để đảm bảo bạn không sao chép tệp bao gồm

Lỗi nghiêm trọng. Dung lượng bộ nhớ cho phép đã hết

Fatal error: Allowed memory size of 67108864 bytes exhausted [tried to allocate 17472 bytes] in /home/mysite/public_html/lib/Image.class.php on line 198

Thông thường, bạn sẽ thấy lỗi này khi cố gắng tải lên và xử lý một hình ảnh, mặc dù bạn có thể gặp lỗi này đối với bất kỳ tập lệnh nào cần nhiều bộ nhớ để chạy. Dung lượng bộ nhớ mà tập lệnh của bạn được phép sử dụng do nhà cung cấp dịch vụ lưu trữ đặt. Trên các gói lưu trữ chia sẻ giá rẻ, các giới hạn này thường được đặt rất thấp. Nếu bạn cần sử dụng tập lệnh để xử lý hình ảnh lớn, hãy liên hệ với nhà cung cấp của bạn để xem liệu bạn có thể chuyển sang gói có giới hạn cao hơn hay không

Lỗi quyền

Warning: move_uploaded_file[/home/mysite/public_html/upload/my_cat.jpg] [function.move-uploaded-file]: failed to open stream: Permission denied in /home/mysite/public_html/upload.php on line 49

Cảnh báo này là một ví dụ về lỗi quyền. Tập lệnh đang cố tải một tệp lên một thư mục, nhưng thư mục đó không có đủ quyền để chuyển tệp vào đó. Các quyền mà PHP cần để ghi vào tệp hoặc thư mục tùy thuộc vào cách cấu hình máy chủ và việc bạn đang sử dụng máy chủ Unix hay Windows. Phần trên “” trong WordPress Codex có liên quan ngay cả khi bạn không sử dụng WordPress. Tuy nhiên, nếu bạn nhận được bất kỳ loại lỗi hoặc cảnh báo "Quyền bị từ chối" nào và không thể khắc phục nó chỉ bằng cách thay đổi quyền cho thư mục, hãy nói chuyện với nhà cung cấp dịch vụ lưu trữ của bạn thay vì nhà phát triển tập lệnh, vì nhà cung cấp của bạn sẽ có thể

Cảnh báo PHP. Bao gồm

PHP Warning:  include[foo.php]: failed to open stream: No such file or directory in /home/mysite/public_html/test.php on line 2

Cảnh báo này cho bạn biết rằng không tìm thấy tệp bao gồm [được bao gồm bằng cách sử dụng cú pháp

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
0 của PHP]. Đó là một cảnh báo chứ không phải là một lỗi, bởi vì PHP sẽ tiếp tục cố gắng tải trang nếu nó không thể tìm thấy một bao gồm

Trong PHP, bạn có thể bao gồm các tệp bằng cách sử dụng

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
1 hoặc
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
2. Nếu bạn sử dụng
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
2, thì bạn đang nói với PHP rằng tập lệnh này rất quan trọng để chạy trang web và vì vậy PHP sẽ báo lỗi nếu không tìm thấy tệp, thay vì cố gắng tiếp tục

Nếu bạn nhận được cảnh báo hoặc thông báo lỗi rằng không thể mở tệp, thì hãy kiểm tra xem tệp được đề cập trong thông báo lỗi có ở đó không và đường dẫn của bạn đến tệp đó có chính xác không. Ví dụ: nếu bạn có tệp

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
4 và trang gọi tệp này nằm trong thư mục
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
5, thì bạn cần bao gồm
php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
6 cùng với nội dung bao gồm sau

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
0

Bỏ qua

php_flag  log_errors on
php_flag display_errors off
php_value error_log  /your/path/public_html/errors/php_error.log
php_value error_reporting 1
7 sẽ dẫn đến cảnh báo vì PHP sẽ không thể tìm thấy tệp

Tóm tắt

Các lỗi PHP có vẻ rất khó hiểu nếu bạn không phải là nhà phát triển PHP, nhưng nếu bạn đọc kỹ thông báo lỗi, bạn thường sẽ tìm thấy điều gì đó dẫn bạn đến gốc rễ của vấn đề. Hầu hết các lỗi tôi thấy trong bộ phận hỗ trợ kỹ thuật đều liên quan đến kết nối cơ sở dữ liệu không chính xác, thiếu tệp hoặc quyền. Đây là tất cả những điều mà một người không có kiến ​​thức về PHP có thể tự xác định và khắc phục, chỉ bằng cách học cách truy cập các thông báo lỗi và làm quen với những gì PHP đề cập trong đó. Có thể gỡ lỗi các loại sự cố này sẽ giúp bạn tránh được rất nhiều sự thất vọng và sẽ giúp bạn không phải chờ bộ phận hỗ trợ kỹ thuật liên hệ lại với mình

Nếu bạn gặp lỗi khi cài đặt tập lệnh, hãy nhớ những điều sau

  1. Tìm hiểu cách truy cập các lỗi PHP trên máy chủ của bạn
  2. Nhìn vào nhật ký lỗi để xem lỗi thực sự là gì
  3. Xem liệu bạn có thể xác định nguồn gốc của sự cố hay không bằng cách xem thông báo lỗi hoặc cảnh báo ban đầu cho tập lệnh
  4. Nếu lỗi có vẻ liên quan đến quyền hoặc cấu hình cơ sở dữ liệu không chính xác, hãy mở một yêu cầu với nhà cung cấp dịch vụ lưu trữ của bạn
  5. Nếu tập lệnh là vấn đề, hãy mở một yêu cầu với nhà phát triển, giải thích những gì bạn đã làm và sao chép thông tin từ nhật ký lỗi. Bạn sẽ mang lại niềm vui cho họ nếu bạn cung cấp thông báo lỗi thực tế thay vì nói rằng bạn đã thấy một trang trống

Đọc thêm

  • “Xử lý lỗi PHP nâng cao qua. htaccess,” Jeff Starr, Báo chí hư hỏng
  • “,” WordPress CodexThông tin dành riêng cho WordPress về cách định cấu hình nhật ký lỗi
  • “3 cách để giám sát lỗi PHP,” Jeff Starr, Digging Into WordPressBao gồm một số phương pháp ghi lỗi khác

Bạn có gặp một lỗi đặc biệt khó hiểu khi cài đặt tập lệnh không?

Chủ Đề