เปลี่ยนเส้นทางหน้าหลังจากระยะเวลาหนึ่ง PHP


95

มีฟังก์ชัน PHP บางอย่างสำหรับการเปลี่ยนเส้นทางหลังจากผ่านไประยะหนึ่ง เคยเห็นที่ไหน แต่จำไม่ได้ มันเหมือนกับการเปลี่ยนเส้นทางของ gmail หลังจากเข้าสู่ระบบแล้วใครช่วยเตือนฉันได้ไหม


@zerkms: ดูเหมือนว่าจะมีสองวิธีที่จะทำ
Wesley Murch

2
@Wesley Murch: Refreshส่วนหัวไม่ใช่แบบมาตรฐาน ฉันไม่เคยใช้สิ่งที่ไม่ครอบคลุมด้วย RFCs
zerkms

stackoverflow.com/questions/18305258/…ทำให้ฉันไปที่stackoverflow.com/questions/283752/refresh-http-headerซึ่งระบุว่าส่วนหัวการรีเฟรชไม่เป็นมาตรฐานยังทำให้เกิดปัญหาด้านประสิทธิภาพใน Internet Explorer
Edward

คำตอบ:


231
header( "refresh:5;url=wherever.php" );

นี่คือวิธีตั้งค่า php headerซึ่งจะเปลี่ยนเส้นทางคุณไปwherever.phpใน5 วินาที


โปรดจำไว้ว่าต้องเรียก header () ก่อนที่จะส่งเอาต์พุตจริงไม่ว่าจะโดยแท็ก HTML ปกติบรรทัดว่างในไฟล์หรือจาก PHP เป็นข้อผิดพลาดที่พบบ่อยมากในการอ่านโค้ดที่มีฟังก์ชัน include หรือต้องการฟังก์ชันหรือฟังก์ชันการเข้าถึงไฟล์อื่นและมีช่องว่างหรือบรรทัดว่างที่เอาต์พุตก่อนที่จะเรียก header () ปัญหาเดียวกันนี้เกิดขึ้นเมื่อใช้ไฟล์ PHP / HTML ไฟล์เดียว (ที่มาphp.net )


1
น่าสนใจฉันไม่เคยเห็นวิธีนี้มาก่อน ... แต่จะไม่แสดงหน้าว่างหรือเพียงแค่ว่างโดยไม่มีข้อความใด ๆ จนกว่าเวลาจะหมด?
Ibu

มันจะแสดงหน้า ... ทั้งหมดที่ทำก็คือการตั้งค่า header witch จะบอกให้เบราว์เซอร์รีเฟรชหน้าใน 5 วินาทีถ้าคุณต้องการแสดงหน้าว่างก็ใช้die();
Teneff

2
สิ่งที่ไม่ดีเกี่ยวกับเรื่องนี้คือ: ส่วนหัวนี้ไม่อยู่ในมาตรฐาน HTTP ไคลเอ็นต์สามารถเพิกเฉยได้
Sven

:) ความคิดที่ดี! และถ้าคุณต้องการส่ง (เก็บ) ตัวแปรบางตัวและใช้ในหน้าที่โหลดซ้ำ?
Mugur Ungureanu

อาจจะเป็นพันล้านปีนับตั้งแต่โพสต์นี้ แต่คุณจะโพสต์ข้อความขณะเปลี่ยนเส้นทางได้อย่างไรเช่น "กำลังเปลี่ยนเส้นทางโปรดรอสักครู่"
CAO

25

คุณสามารถใช้จาวาสคริปต์เพื่อเปลี่ยนเส้นทางได้หลังจากนั้นสักครู่

setTimeout(function () {
   window.location.href= 'http://www.google.com'; // the redirect goes here

},5000); // 5 seconds

11
คำถามสำหรับ PHP
Benjamin Intal

5
@Jami มันเป็นเรื่องจริงนั่นคือเหตุผลที่ฉันบอกว่า OP สามารถใช้จาวาสคริปต์แทนได้
Ibu

@BenjaminIntal นอกจากนี้ยังใช้เป็นทางเลือกที่ดีหากเบราว์เซอร์ละเว้นการเปลี่ยนเส้นทางในส่วนหัว คุณต้องใช้เบราว์เซอร์ที่ไม่ยอมรับส่วนหัวและปิดใช้งาน Javascript เพื่อไม่ให้รับการเปลี่ยนเส้นทาง
Super Cat

18

คุณสามารถลองสิ่งนี้:

header('Refresh: 10; URL=http://yoursite.com/page.php');

โดยที่ 10 เป็นวินาที


11

คุณต้องการใช้ php เพื่อเขียนเมตาแท็ก

<meta http-equiv="refresh" content="5;url=http://www.yoursite.com">

ไม่แนะนำ แต่เป็นไปได้ 5 ในตัวอย่างนี้คือจำนวนวินาทีก่อนที่จะรีเฟรช


3

การรีเฟรช PHP หลังจากผ่านไป 5 วินาทีไม่ได้ผลสำหรับฉันเมื่อเปิดกล่องโต้ตอบบันทึกเป็นเพื่อบันทึกไฟล์: (header ('Content-type: text / plain'); header ("Content-Disposition: attachment; filename = $ filename > ");)

หลังจากคลิกลิงก์บันทึกเป็นและบันทึกไฟล์แล้วการรีเฟรชตามกำหนดเวลาจะหยุดบนหน้าการโทร

อย่างไรก็ตามขอบคุณมากโซลูชันจาวาสคริปต์ของ ibu ยังคงอยู่ในการติ๊กและรีเฟรชหน้าเว็บของฉันซึ่งเป็นสิ่งที่ฉันต้องการสำหรับแอปพลิเคชันเฉพาะของฉัน ดังนั้นขอขอบคุณ ibu สำหรับการโพสต์วิธีแก้ปัญหา javascript สำหรับปัญหา php ที่นี่

คุณสามารถใช้จาวาสคริปต์เพื่อเปลี่ยนเส้นทางได้หลังจากนั้นสักครู่

setTimeout(function () {    
    window.location.href = 'http://www.google.com'; 
},5000); // 5 seconds

3
header( "refresh:5;url=wherever.php" );

คุณสามารถใช้รหัสนี้ได้ตามที่ teneff กล่าว แต่คุณไม่จำเป็นต้องใส่ส่วนหัวก่อนเอาต์พุตที่ส่งออกไป (สิ่งนี้จะส่งออก "ไม่สามารถย้ายส่วนหัว .... : 3 error")

ในการแก้ปัญหานี้ให้ใช้ฟังก์ชัน php ob_start();ก่อนที่ html จะถูกส่งออก

หากต้องการยุติ ob ให้ใส่ob_end_flush();หลังจากที่คุณไม่มีเอาต์พุต html

ไชโย!


2

หากคุณกำลังเปลี่ยนเส้นทางด้วย PHP คุณก็แค่ใช้คำสั่ง sleep () เพื่อพักไม่ว่าจะกี่วินาทีก่อนที่จะเปลี่ยนเส้นทาง

แต่ฉันคิดว่าสิ่งที่คุณอ้างถึงคือเมตารีเฟรชแท็ก:

http://webdesign.about.com/od/metataglibraries/a/aa080300a.htm


การใช้การนอนหลับไม่ใช่วิธีการทั่วไปตามที่กล่าวไว้ข้างต้นควรใช้ฟังก์ชันส่วนหัว
Maksim

ไม่ได้นอนเพียงแค่ชะลอการเชื่อมต่อ?
FluorescentGreen5

2

คุณสามารถใช้โค้ดจาวาสคริปต์นี้เพื่อเปลี่ยนเส้นทางหลังจากเวลาที่กำหนด หวังว่ามันจะได้ผล

setRedirectTime(function () 
{
   window.location.href= 'https://www.google.com'; // the redirect URL will be here

},10000); // 10 seconds

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