รีเฟรชหน้าโดยใช้ PHP


148

ฉันจะรีเฟรชหน้าเว็บโดยใช้ PHP เป็นระยะได้อย่างไร ถ้าฉันไม่สามารถทำได้ด้วย PHP สถานการณ์ที่แนะนำดีที่สุดคืออะไร


เรากำลังพูดถึงการซิงค์ (คุณพบสถานการณ์ที่คุณต้องการรีเฟรชในระหว่างการแยกวิเคราะห์สคริปต์ PHP) (รีเฟรชเมตาจะทำงานได้ดี) หรือเกี่ยวกับการรีเฟรชหน้าอย่างต่อเนื่อง async (เช่น javascript / ajax)?
Najzero

คำตอบ:


275

คุณสามารถทำได้ด้วย PHP:

header("Refresh:0");

มันรีเฟรชหน้าปัจจุบันของคุณและถ้าคุณต้องการที่จะเปลี่ยนเส้นทางไปยังหน้าอื่นใช้ต่อไปนี้:

header("Refresh:0; url=page2.php");

1
การรีเฟรชไม่ใช่ส่วนหัวอย่างเป็นทางการ แต่ได้รับการสนับสนุนโดยเบราว์เซอร์จำนวนมากตั้งแต่ Netscape Navigator นั่นหมายความว่าคุณจะต้องทดสอบเพื่อให้แน่ใจว่าผู้ชมของคุณใช้เบราว์เซอร์ที่รองรับ
Patanjali

5
การใช้0จะตอกย้ำเซิร์ฟเวอร์ของคุณและ / หรือแคชในพื้นที่ของคุณอย่างต่อเนื่องโดยเฉพาะถ้าคุณมีภาพในหน้า หากคุณต้องการอัปเดตข้อมูลบนหน้าจอเช่นราคาหุ้น แต่ไม่ใช้ข้อมูลนั้นในรูปแบบหรือจากจาวาสคริปต์อาจใช้แท็กiframe ที่ชี้ไปยังหน้าเว็บที่มีเพียงข้อมูลที่อัปเดตและมีความล่าช้าตามสมควรข้อมูลปัจจุบันจะต้องเป็น
Patanjali

1
นี่เป็นสาเหตุของข้อผิดพลาด "ส่วนหัวที่ส่งไปแล้ว"ในรหัสของฉัน ... มีวิธีอื่นหรือไม่
DBS

ตรวจสอบที่นี่สำหรับการแก้ปัญหา; tldr คุณไม่สามารถแสดงผลอะไรก่อนใช้งานheader();
adrian

109

ในPHPคุณสามารถใช้:

$page = $_SERVER['PHP_SELF'];
$sec = "10";
header("Refresh: $sec; url=$page");

หรือเพียงแค่ใช้ของ window.location.reload()JavaScript


2
ส่วนหัวของ Yazana ('ตำแหน่ง:') ใช้เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยัง URL ใด ๆ คุณไม่สามารถรีเฟรชหน้าโดยใช้
Patriks

2
Pratik คุณผิด. คุณสามารถใช้ส่วนหัว ("รีเฟรช:") เพื่อรีเฟรชหน้า
131

6
คุณสามารถทำทั้งสองอย่างได้แม้ว่าฉันจะไม่ต้องการเวลารอ:header("Location: ".$_SERVER['PHP_SELF']);
John Magnolia

4
หมายเหตุเกี่ยวกับวิธีแก้ไขปัญหานี้: หากไซต์ของคุณใช้การกำหนดเส้นทางที่ดีหรือการเขียน URL ใหม่ (เช่นเกือบทุกเฟรมเวิร์คตามค่าเริ่มต้น) คุณอาจพบว่า$_SERVER['PHP_SELF']ให้เส้นทางสคริปต์จริงไม่ใช่ URL จริงที่คุณเห็นในเบราว์เซอร์ของคุณ ในกรณีนี้ให้ลองใช้$_SERVER['REQUEST_URI']แทน
BadHorsie

18

คุณสามารถรีเฟรชหน้าเป็นระยะโดยใช้ PHP:

<?php
    header("refresh: 3;");
?>

วิธีนี้จะรีเฟรชหน้าทุกสามวินาที



12

ฉันพบสองวิธีในการรีเฟรชเนื้อหา PHP:

1. การใช้metaแท็กHTML :

echo("<meta http-equiv='refresh' content='1'>"); //Refresh by HTTP 'meta'

2. ใช้อัตราการรีเฟรช PHP:

$delay = 0; // Where 0 is an example of a time delay. You can use 5 for 5 seconds, for example!
header("Refresh: $delay;"); 

2
//Refresh by HTTP META => // Refresh by HTML METAและนี่ดูเหมือนคำตอบที่คัดลอกมาจากด้านบน
php_coder_3809625

11

นอกจากวิธี PHP ทั้งหมดในการรีเฟรชหน้าแล้วเพจจะถูกรีเฟรชด้วยเมตาแท็ก HTML ต่อไปนี้:

<meta http-equiv="refresh" content="5">

ดูการรีเฟรช Meta - "รีเฟรชหน้าเว็บหรือเฟรมปัจจุบันโดยอัตโนมัติหลังจากช่วงเวลาที่กำหนด"

คุณสามารถกำหนดเวลาภายในcontentค่า


3
นี้จะรีเฟรชทุก 0 วินาที - อาจไม่ใช่สิ่งที่คุณกำลังจะให้ :)
วอร์เรน

3
ใช่ฉันแสดงความคิดเห็นกับคำตอบนี้: มีห้องพักสำหรับการปรับปรุงอยู่เสมอ และคุณกำลังขวาคุณสามารถตั้งค่าcontentเท่ากับค่าใด ๆ ในวินาที - ความคิดเห็นของฉันยังคงเป็นที่น่าสังเกตว่าการฟื้นฟูของ 0 วินาทีอาจจะไม่ใช่สิ่งที่คุณกำลังจะให้ :)
วอร์เรน

2
@Mathlight และใครก็ตามที่บ่นเกี่ยวกับความคิดเห็นที่ล่าช้า เพียงเพราะคุณอาจก้าวต่อไปผู้อ่านในอนาคตอาจเพิ่งประสบปัญหาและคำตอบ / ความคิดเห็นของคุณพร้อมกับคนที่ล่าช้าที่ท้าทายมันอาจยังเกี่ยวข้องกับพวกเขา
Patanjali

1
@Mathlight ฉันไม่แน่ใจว่าทำไมคนคิดว่าเพียงเพราะโพสต์เก่าจะมีค่าในการแสดงความคิดเห็นไม่ได้ คุณควรกำจัดความคิดนั้น
Mark Kramer

"Build in the if statement from"หมายความว่าอย่างไร?
Peter Mortensen

2

header('Location: .'); ดูเหมือนว่าจะรีเฟรชหน้าใน Chrome, Firefox, Edge และ Internet Explorer 11


ตามที่ควร (หนึ่งครั้ง): php.net/manual/en/function.header.php : "กรณีพิเศษที่สองคือส่วนหัว" Location: "ไม่เพียง แต่จะส่งส่วนหัวนี้กลับไปยังเบราว์เซอร์ รหัสสถานะ REDIRECT (302) ไปยังเบราว์เซอร์เว้นแต่ว่าได้ตั้งรหัสสถานะ 201 หรือ 3xx แล้ว "
Sz.

แต่นั่นไม่ใช่สิ่งที่ OP ขอ ฉันยัง upvoting มันเพราะฉันรู้ว่าหลังจากนั้นเพียงขออภัย มันเป็นคริสต์มาสเร็ว ๆ นี้! :)
Sz.

1

คุณไม่สามารถทำมันในPHP เมื่อโหลดเพจแล้ว PHP ก็จะตายและควบคุมไม่ได้

คุณมีตัวเลือกน้อย:

ฉันคิดว่าเมตาแท็กการรีเฟรชเป็นวิธีที่ง่ายที่สุดและสะดวกที่สุด


63
ผิดคุณสามารถรีเฟรชหน้าเป็นระยะโดยใช้ PHP ถ้าคุณใช้ฟังก์ชั่นส่วนหัวของ PHP เช่นนี้: header ("refresh: 3;");
131

1
คุณสามารถรีเฟรชหน้าใน PHP โดยใช้ส่วนหัว นอกจากนี้การใช้ META REFRESH ก็ไม่เหมาะสำหรับ SEO
TheCarver

1
ฉันคิดว่ามันผิดมีวิธีเสมอ: ฉันคิดว่าถ้าเขาต้องการรีเฟรชหน้าเว็บด้วย php หลังจากบางขณะสามารถส่งคำขอ ajax ไปยังหน้าที่มีรหัสรีเฟรชของ php แต่คำตอบของคุณดีมาก
Mohammad Kermani

2
ไม่ถูกต้อง ! โปรดแก้ไขคำตอบของคุณ ... แน่นอนว่าสิ่งนี้สามารถทำได้ด้วย PHP
M_R_K

1
นี่มันผิดทั้งหมด! ในทุกวิถีทาง มันสามารถทำได้โดย PHP โดยส่วนหัว (รีเฟรช) และโดยการเปลี่ยนเส้นทางที่ถูกเรียก ดูเหมือนว่าคำตอบอื่น ๆ จะดีกว่า
Budimir Grom

1

คุณสามารถรีเฟรชโดยใช้ JavaScript แทนที่จะรีเฟรชหน้าสมบูรณ์คุณสามารถให้เนื้อหาที่จะรีเฟรชใน div จากนั้นโดยใช้ JavaScript คุณสามารถรีเฟรช div เฉพาะนั้นและทำงานได้เร็วกว่าการรีเฟรชหน้าโดยสมบูรณ์


2
หากคุณใส่รหัสคำตอบนี้อาจเข้าใจได้มากกว่านี้เล็กน้อย
I.Am.A.Guy

1

PHPเป็นภาษาฝั่งเซิร์ฟเวอร์ดังนั้นคุณจึงไม่สามารถรีเฟรชหน้าเว็บด้วย PHP ได้ แต่ JavaScript เป็นตัวเลือกที่ดีที่สุดในการรีเฟรชหน้าเว็บ:

location.reload();

เยี่ยมชมโหลดที่ตั้ง () วิธีการ


1
Hahahah ตกลงแล้วตามที่คุณต้องการ ลองดูนี่ => ( misDomain.epl.fanxt.com ) เขาไม่ได้ระบุว่าเขาจะรีเฟรชหน้า 'หลังจาก' โหลดแล้ว หากการตัดสินใจรีเฟรชเกิดขึ้นระหว่างการเรียกใช้งานโค้ด php ดังนั้น php จึงสามารถรีเฟรชได้อย่างแน่นอนและสามารถเลือกได้ว่าจะรีเฟรชกี่วินาที
Mohammed Joraid

@Ahmad คุณไม่สามารถพิจารณาได้ว่าเป็นฟีเจอร์ของ PHP มันเป็นคุณสมบัติของ HTML ดังนั้นในการเรียงลำดับคุณกำลังทำโดยตั้งค่าส่วนหัวการตอบสนอง html และนั่นคือเหตุผลที่ฉันบอกว่าคุณไม่สามารถทำได้ด้วย PHP อีกอย่างคุณไม่สามารถรีเฟรชหน้าหลังจากโหลด / เมื่อจำเป็น ใช่คุณสามารถตั้งค่าสำหรับวินาทีหรืออื่น ๆ ตามที่คุณตอบ
Patriks

โอ้ช่างเทคนิค คิดว่าเป็นไปได้หรือไม่ที่จะใช้ส่วนหัวเพื่อรีเฟรชภาพบางภาพ? นั่นคือถ้าคุณสตรีมภาพผ่าน php ของหยาบ
EZFrag

@EZFrag จริงๆฉันไม่รู้คุณช่วยบอกฉันได้มั้ย
Patriks

อ่าใช่เจอแล้ว ตอนแรกฉันลองใช้แท็กรูปภาพปกติ ไม่มีโชค. แต่ฉันเปลี่ยนแท็กรูปภาพด้วยแท็ก iframe และ voila ภาพรีเฟรชโดยอัตโนมัติ สิ่งนี้จะช่วยได้มากกับภาพสถานะบนหน้าเว็บของฉัน :) สำหรับสิ่งที่สงสัยฉันกำลังแสดงภาพผ่าน php พร้อมกับส่วนหัวรีเฟรชตั้งค่าไฟล์ php เป็น src ของ iframe
EZFrag

1

สะท้อนmetaแท็กดังนี้:

URL คือหน้าที่ควรเปลี่ยนเส้นทางไปยังหน้าหลังจากรีเฟรช

echo "<meta http-equiv=\"refresh\" content=\"0;URL=upload.php\">";

แต่คำถามไม่ได้เกี่ยวกับการเปลี่ยนเส้นทาง มันเกี่ยวกับการรีเฟรช
Peter Mortensen

1

การเพิ่มเมตาแท็กนี้ใน PHP อาจช่วยได้:

echo '<META HTTP-EQUIV="Refresh" Content="0; URL=' . $location . '">';

3
ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
DimaSan

แต่คำถามไม่ได้เกี่ยวกับการเปลี่ยนเส้นทาง มันเกี่ยวกับการรีเฟรช
Peter Mortensen

0

เคล็ดลับหนึ่งคือการเพิ่มตัวเลขสุ่มที่ส่วนท้ายของ URL ด้วยวิธีนี้คุณไม่ต้องเปลี่ยนชื่อไฟล์ทุกครั้ง เช่น:

echo "<img src='temp.jpg?r=3892384947438'>"

เบราว์เซอร์จะไม่แคชตราบเท่าที่หมายเลขสุ่มแตกต่างกัน แต่เว็บเซิร์ฟเวอร์จะไม่สนใจ


2
การรีเฟรชหน้านั้นเป็นระยะ ๆ อย่างไร คุณตอบสนองต่อคำตอบอื่นหรือไม่?
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.