[Programming] Hỏi về lỗi - Cannot modify header information... trong PHP |
12/09/2008 04:08:11 (+0700) | #1 | 150711 |
belenba
Member
|
0 |
|
|
Joined: 23/12/2006 23:40:54
Messages: 22
Offline
|
|
Em bị gặp lỗi này khi chỉnh sửa code PHP và khi lập trình PHP:
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\blogcms\admin\libs\globalfunctions.php:1) in C:\AppServ\www\blogcms\admin\libs\globalfunctions.php on line 407
Lỗi này xuất hiện khi em sử dụng các hàm như Header(), Cookie(), Location() nó xảy ra khi em thực hiện việc echo trước khi chạy hàm này hoặc đặc biệt là khi em lưu file PHP dưới dạng Unicode UTF-8 ( lưu lại bằng Notepad ), em phán đoán là do việc file được lưu dưới dạng UTF-8 đã send một header về máy chủ trước khi em chạy các hàm trên nên sinh lỗi.
Mong các anh chị có kinh nghiệm chỉ em cách khắc phục lỗi này, và cho em hỏi là khi lỗi này xảy ra thì ngoài việc PHP Warning ( chỉ là warning nên mức độ nghiệm trọng thấp ?!? ) thì có thiệt hại gì nữa không ạ.
Em mới nghiên cứu về php nên ít kinh nghiệm, mong các anh chị giúp đỡ |
|
|
|
|
[Question] Hỏi về lỗi - Cannot modify header information... trong PHP |
12/09/2008 04:31:08 (+0700) | #2 | 150717 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Error messages wrote:
Warning: Cannot modify header information - headers already sent by ...
Bạn cứ dán nguyên dòng này vào Google cho tớ, tìm đọc một hồi, kiểu gì bạn cũng biết nguyên nhân và cách khắc phục. |
|
Let's build on a great foundation! |
|
|
|
[Question] Hỏi về lỗi - Cannot modify header information... trong PHP |
12/09/2008 08:17:00 (+0700) | #3 | 150741 |
|
comebacktm
Member
|
0 |
|
|
Joined: 07/09/2008 02:45:16
Messages: 34
Offline
|
|
belenba wrote:
Em bị gặp lỗi này khi chỉnh sửa code PHP và khi lập trình PHP:
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\blogcms\admin\libs\globalfunctions.php:1) in C:\AppServ\www\blogcms\admin\libs\globalfunctions.php on line 407
Lỗi này xuất hiện khi em sử dụng các hàm như Header(), Cookie(), Location() nó xảy ra khi em thực hiện việc echo trước khi chạy hàm này hoặc đặc biệt là khi em lưu file PHP dưới dạng Unicode UTF-8 ( lưu lại bằng Notepad ), em phán đoán là do việc file được lưu dưới dạng UTF-8 đã send một header về máy chủ trước khi em chạy các hàm trên nên sinh lỗi.
Mong các anh chị có kinh nghiệm chỉ em cách khắc phục lỗi này, và cho em hỏi là khi lỗi này xảy ra thì ngoài việc PHP Warning ( chỉ là warning nên mức độ nghiệm trọng thấp ?!? ) thì có thiệt hại gì nữa không ạ.
Em mới nghiên cứu về php nên ít kinh nghiệm, mong các anh chị giúp đỡ
Bạn nên dùng hàm ob_start() và ob_clean() trước khi gửi dữ liệu và kết thúc việc gửi dữ liệu rồi mới dùng hàm header(). Bạn xem ví dụ này nhé: Mình có 2 file nằm cùng thư mục là test1.php và test2.php. Trong file test1.php mình viết như sau:
<?php
echo "ABC";
header("Location: test2.php");
?>
File test2.php như sau:
<?php
echo "xin chao";
?>
Khi chạy file test1.php thì báo lỗi:
ABC
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\test\test1.php:3) in C:\AppServ\www\test\test1.php on line 5
Để khắc phục bạn viết file test1.php như sau:
<?php
ob_start();
echo "ABC";
ob_clean();
header("Location: test2.php");
?>
Khi chạy ok ngay:
xin chao |
|
|
|
|
[Question] Re: Hỏi về lỗi - Cannot modify header information... trong PHP |
12/09/2008 08:27:32 (+0700) | #4 | 150745 |
|
motminhanh
Member
|
0 |
|
|
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
|
|
belenba wrote:
Lỗi này xuất hiện khi em sử dụng các hàm như Header(), Cookie(), Location()..
Mình cũng không thành thạo PHP lắm,nhưng mấy hàm kia trong các tài liệu PHP,ở đầu mỗi hàm đều chú thích cách sử dụng mà,bạn nên đọc kĩ đi |
|
|
|
|
[Question] Re: Hỏi về lỗi - Cannot modify header information... trong PHP |
14/09/2008 18:29:05 (+0700) | #5 | 151204 |
PhoeNixhcd
Member
|
0 |
|
|
Joined: 03/05/2004 04:00:58
Messages: 6
Offline
|
|
Bạn chú ý ở trên tag mở <?php và dưới tag đóng ?> xem có cái dòng nào trống hay ko , bỏ các dòng trắng đó đi . |
|
|
|
|
[Question] Hỏi về lỗi - Cannot modify header information... trong PHP |
15/09/2008 02:47:18 (+0700) | #6 | 151249 |
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
|
|
comebacktm wrote:
belenba wrote:
Em bị gặp lỗi này khi chỉnh sửa code PHP và khi lập trình PHP:
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\blogcms\admin\libs\globalfunctions.php:1) in C:\AppServ\www\blogcms\admin\libs\globalfunctions.php on line 407
Lỗi này xuất hiện khi em sử dụng các hàm như Header(), Cookie(), Location() nó xảy ra khi em thực hiện việc echo trước khi chạy hàm này hoặc đặc biệt là khi em lưu file PHP dưới dạng Unicode UTF-8 ( lưu lại bằng Notepad ), em phán đoán là do việc file được lưu dưới dạng UTF-8 đã send một header về máy chủ trước khi em chạy các hàm trên nên sinh lỗi.
Mong các anh chị có kinh nghiệm chỉ em cách khắc phục lỗi này, và cho em hỏi là khi lỗi này xảy ra thì ngoài việc PHP Warning ( chỉ là warning nên mức độ nghiệm trọng thấp ?!? ) thì có thiệt hại gì nữa không ạ.
Em mới nghiên cứu về php nên ít kinh nghiệm, mong các anh chị giúp đỡ
Bạn nên dùng hàm ob_start() và ob_clean() trước khi gửi dữ liệu và kết thúc việc gửi dữ liệu rồi mới dùng hàm header(). Bạn xem ví dụ này nhé: Mình có 2 file nằm cùng thư mục là test1.php và test2.php. Trong file test1.php mình viết như sau:
<?php
echo "ABC";
header("Location: test2.php");
?>
File test2.php như sau:
<?php
echo "xin chao";
?>
Khi chạy file test1.php thì báo lỗi:
ABC
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\test\test1.php:3) in C:\AppServ\www\test\test1.php on line 5
Để khắc phục bạn viết file test1.php như sau:
<?php
ob_start();
echo "ABC";
ob_clean();
header("Location: test2.php");
?>
Khi chạy ok ngay:
xin chao
Hơi không chính xác rồi bồ, nếu bồ dùng ob_clean() thì bộ đệm sẽ bị xóa mà không có dữ liệu được send ra
Phải sử dụng bộ hàm này như sau:
hàm ob_start() sẽ bật bộ đệm ( buffer - giống một chỗ lưu tạm í mà ) sau đó mọi hàm nào mà có xuất dữ liệu (tức nôm na là cho ra "chữ" í vd: echo, print .v.v. ) thì dữ liệu xuất sẽ không được gửi về trình duyệt ( tức là ko hiện lên trên màn hình - cái này cũng là tớ nói nôm na cho đằng ấy dễ hỉu luôn ) mà dc lưu vào bộ đệm, sau đó bạn thoải mái dùng các hàm như là Header(), Cookie() .v.v. , sau cùng bạn dùng hàm ob_end_flush() hàm này sẽ tắt bộ đệm và mang tất cả những "chữ" có trong bộ đệm rồi "gửi" (flush) nó về trình duyệt ( khi này chữ sẽ hiện lên màn hình ).
Mình chỉnh đoạn code của bạn comebacktm như sau:
Code:
<?php
ob_start();
echo "ABC";
header("Location: test2.php");
ob_end_flush();
?>
hàm ob_end_flush() đặt sau cùng vì khi gặp nó là PHP trả dữ liệu về ngay, bạn đặt nó tại nơi bạn muốn trả dữ liệu về
Và còn một vấn đề khác là bạn save file dưới encoding UTF-8 cũng sẽ gây lỗi này, ngay sau reply này tôi sẽ viết một bài về vấn đề này gọi là BOM signature remover. |
|
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline |
|
|
|
[Question] Re: Hỏi về lỗi - Cannot modify header information... trong PHP |
15/09/2008 03:44:21 (+0700) | #7 | 151257 |
belenba
Member
|
0 |
|
|
Joined: 23/12/2006 23:40:54
Messages: 22
Offline
|
|
Dạ cám ơn các anh đã giúp đỡ, nhờ các anh em đã tìm ra được hướng giải quyết, em cám ơn nhiều lắm ạ . |
|
|
|
|
[Question] Hỏi về lỗi - Cannot modify header information... trong PHP |
15/09/2008 05:19:44 (+0700) | #8 | 151267 |
|
comebacktm
Member
|
0 |
|
|
Joined: 07/09/2008 02:45:16
Messages: 34
Offline
|
|
xnohat wrote:
comebacktm wrote:
belenba wrote:
Em bị gặp lỗi này khi chỉnh sửa code PHP và khi lập trình PHP:
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\blogcms\admin\libs\globalfunctions.php:1) in C:\AppServ\www\blogcms\admin\libs\globalfunctions.php on line 407
Lỗi này xuất hiện khi em sử dụng các hàm như Header(), Cookie(), Location() nó xảy ra khi em thực hiện việc echo trước khi chạy hàm này hoặc đặc biệt là khi em lưu file PHP dưới dạng Unicode UTF-8 ( lưu lại bằng Notepad ), em phán đoán là do việc file được lưu dưới dạng UTF-8 đã send một header về máy chủ trước khi em chạy các hàm trên nên sinh lỗi.
Mong các anh chị có kinh nghiệm chỉ em cách khắc phục lỗi này, và cho em hỏi là khi lỗi này xảy ra thì ngoài việc PHP Warning ( chỉ là warning nên mức độ nghiệm trọng thấp ?!? ) thì có thiệt hại gì nữa không ạ.
Em mới nghiên cứu về php nên ít kinh nghiệm, mong các anh chị giúp đỡ
Bạn nên dùng hàm ob_start() và ob_clean() trước khi gửi dữ liệu và kết thúc việc gửi dữ liệu rồi mới dùng hàm header(). Bạn xem ví dụ này nhé: Mình có 2 file nằm cùng thư mục là test1.php và test2.php. Trong file test1.php mình viết như sau:
<?php
echo "ABC";
header("Location: test2.php");
?>
File test2.php như sau:
<?php
echo "xin chao";
?>
Khi chạy file test1.php thì báo lỗi:
ABC
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\test\test1.php:3) in C:\AppServ\www\test\test1.php on line 5
Để khắc phục bạn viết file test1.php như sau:
<?php
ob_start();
echo "ABC";
ob_clean();
header("Location: test2.php");
?>
Khi chạy ok ngay:
xin chao
Hơi không chính xác rồi bồ, nếu bồ dùng ob_clean() thì bộ đệm sẽ bị xóa mà không có dữ liệu được send ra
Phải sử dụng bộ hàm này như sau:
hàm ob_start() sẽ bật bộ đệm ( buffer - giống một chỗ lưu tạm í mà ) sau đó mọi hàm nào mà có xuất dữ liệu (tức nôm na là cho ra "chữ" í vd: echo, print .v.v. ) thì dữ liệu xuất sẽ không được gửi về trình duyệt ( tức là ko hiện lên trên màn hình - cái này cũng là tớ nói nôm na cho đằng ấy dễ hỉu luôn ) mà dc lưu vào bộ đệm, sau đó bạn thoải mái dùng các hàm như là Header(), Cookie() .v.v. , sau cùng bạn dùng hàm ob_end_flush() hàm này sẽ tắt bộ đệm và mang tất cả những "chữ" có trong bộ đệm rồi "gửi" (flush) nó về trình duyệt ( khi này chữ sẽ hiện lên màn hình ).
Mình chỉnh đoạn code của bạn comebacktm như sau:
Code:
<?php
ob_start();
echo "ABC";
header("Location: test2.php");
ob_end_flush();
?>
hàm ob_end_flush() đặt sau cùng vì khi gặp nó là PHP trả dữ liệu về ngay, bạn đặt nó tại nơi bạn muốn trả dữ liệu về
Và còn một vấn đề khác là bạn save file dưới encoding UTF-8 cũng sẽ gây lỗi này, ngay sau reply này tôi sẽ viết một bài về vấn đề này gọi là BOM signature remover.
Vậy là bạn không test thử đoạn mã của mình rồi. Mình đã test thử trước khi đưa lên. Chạy hoàn toàn ok mà. Echo hoặc print thoải mái |
|
|
|
|
[Question] Re: Hỏi về lỗi - Cannot modify header information... trong PHP |
15/09/2008 09:57:31 (+0700) | #9 | 151311 |
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
|
|
Đoạn mã của bạn dĩ nhiên là chạy và không đưa ra lỗi , nhưng nó cũng không echo dữ liệu ra được khi kết thúc buffer, bạn thử đổi dòng Header("Location:test2.php") thành Header("Location:"); và xem kết quả thử nhé, dòng ABC sẽ không được echo ra do bạn dùng hàm ob_clean() hàm này xóa sạch bộ đệm chứ nó có chuyển bộ đệm ra ngoài đâu |
|
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline |
|
[Question] Re: Hỏi về lỗi - Cannot modify header information... trong PHP |
15/09/2008 13:41:00 (+0700) | #10 | 151344 |
|
comebacktm
Member
|
0 |
|
|
Joined: 07/09/2008 02:45:16
Messages: 34
Offline
|
|
Uh. Đúng là nếu dùng ob_clean() thì nó xóa hết và không đưa ra màn hình bạn à. Nhưng mình phải bỏ cả dòng header() đi. Còn viết là header("Location:"); thì báo lỗi ngay |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|