banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Hỏi về lỗi - Cannot modify header information... trong PHP  XML
  [Programming]   Hỏi về lỗi - Cannot modify header information... trong PHP 12/09/2008 04:08:11 (+0700) | #1 | 150711
belenba
Member

[Minus]    0    [Plus]
Joined: 23/12/2006 23:40:54
Messages: 22
Offline
[Profile] [PM]
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 đỡ
[Up] [Print Copy]
  [Question]   Hỏi về lỗi - Cannot modify header information... trong PHP 12/09/2008 04:31:08 (+0700) | #2 | 150717
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

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!
[Up] [Print Copy]
  [Question]   Hỏi về lỗi - Cannot modify header information... trong PHP 12/09/2008 08:17:00 (+0700) | #3 | 150741
[Avatar]
comebacktm
Member

[Minus]    0    [Plus]
Joined: 07/09/2008 02:45:16
Messages: 34
Offline
[Profile] [PM]

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
[Up] [Print Copy]
  [Question]   Re: Hỏi về lỗi - Cannot modify header information... trong PHP 12/09/2008 08:27:32 (+0700) | #4 | 150745
[Avatar]
motminhanh
Member

[Minus]    0    [Plus]
Joined: 06/01/2008 15:43:07
Messages: 101
Location: Homeland corp!
Offline
[Profile] [PM] [ICQ]
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
[Up] [Print Copy]
  [Question]   Re: Hỏi về lỗi - Cannot modify header information... trong PHP 14/09/2008 18:29:05 (+0700) | #5 | 151204
PhoeNixhcd
Member

[Minus]    0    [Plus]
Joined: 03/05/2004 04:00:58
Messages: 6
Offline
[Profile] [PM]
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 .
[Up] [Print Copy]
  [Question]   Hỏi về lỗi - Cannot modify header information... trong PHP 15/09/2008 02:47:18 (+0700) | #6 | 151249
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]

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
[Up] [Print Copy]
  [Question]   Re: Hỏi về lỗi - Cannot modify header information... trong PHP 15/09/2008 03:44:21 (+0700) | #7 | 151257
belenba
Member

[Minus]    0    [Plus]
Joined: 23/12/2006 23:40:54
Messages: 22
Offline
[Profile] [PM]
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 ạ smilie .
[Up] [Print Copy]
  [Question]   Hỏi về lỗi - Cannot modify header information... trong PHP 15/09/2008 05:19:44 (+0700) | #8 | 151267
[Avatar]
comebacktm
Member

[Minus]    0    [Plus]
Joined: 07/09/2008 02:45:16
Messages: 34
Offline
[Profile] [PM]

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
[Up] [Print Copy]
  [Question]   Re: Hỏi về lỗi - Cannot modify header information... trong PHP 15/09/2008 09:57:31 (+0700) | #9 | 151311
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Đ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
[Up] [Print Copy]
  [Question]   Re: Hỏi về lỗi - Cannot modify header information... trong PHP 15/09/2008 13:41:00 (+0700) | #10 | 151344
[Avatar]
comebacktm
Member

[Minus]    0    [Plus]
Joined: 07/09/2008 02:45:16
Messages: 34
Offline
[Profile] [PM]
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
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 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|