ฉันจะโหลดไฟล์ PHP เป็นตัวแปรได้อย่างไร?


101

ฉันต้องการโหลดไฟล์ PHP เป็นตัวแปร ชอบinclude();

ฉันได้โหลดไฟล์ HTML ง่ายๆดังนี้:

$Vdata = file_get_contents("textfile.txt");

แต่ตอนนี้ฉันต้องโหลดไฟล์ PHP

คำตอบ:


117

ฉันคิดว่าคุณต้องการรับเนื้อหาที่สร้างโดย PHPหากเป็นเช่นนั้นให้ใช้:

$Vdata = file_get_contents('http://YOUR_HOST/YOUR/FILE.php');

ไม่เช่นนั้นหากคุณต้องการรับซอร์สโค้ดของไฟล์ PHPจะเหมือนกับไฟล์. txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');

6
จะเกิดอะไรขึ้นถ้าฉันต้องการ "เนื้อหาที่สร้างโดย PHP" โดยไม่ต้องใช้ http และใช้เส้นทางโดยตรง
Osa

4
@Osa: ขึ้นอยู่กับความต้องการของคุณคุณอาจจะได้ใช้eval()หรือถ้าคุณกำลังจัดการกับรหัสที่ซับซ้อนมากขึ้น: github.com/nikic/PHP-Parser
Alix Axel

2
การใช้ php parser เพียงเพื่อที่ดูเหมือนว่าจะใช้งานมากเกินไป
David Fariña

1
ฉันไม่เห็นว่าสิ่งนี้จะผ่าน POST หรือ GET ได้อย่างไร ฉันคิดว่าคำตอบของ neobie น่าจะถูกต้องและเหมาะสมกว่าเนื่องจากไฟล์ PHP ภายนอกจะได้รับการประมวลผลในบริบทของไฟล์ปัจจุบัน
ADTC

จากตัวอย่างด้านบนคุณสามารถใช้ get_template_directory_uri () และเข้าร่วมกับเส้นทางไฟล์ของคุณ วิธีนี้จะแก้ปัญหาการใช้เส้นทางตรง $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
Ian Bruce

125
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean ()


1
ได้ผล! แต่เมื่อใดก็ตามที่ฉันพยายามรวม: yourfile.php? id = 3 มันจะไม่ทำงาน ข้อเสนอแนะใด ๆ ?
tvgemert

1
เนื่องจากคุณไม่ได้ใช้ http อีกต่อไปคุณจึงต้องส่งค่าผ่าน $ _GET ในกรณีนั้น
Francesco Belladonna

แล้วภาพล่ะ?
kta

1
เคล็ดลับ:ตั้งแต่ PHP 4.3.0 คุณสามารถย่อสองบรรทัดสุดท้ายให้เหลือเพียง$myvar = ob_get_clean();(ดูเอกสาร ob_get_clean )
ADTC

สมบูรณ์แบบ! ขอบคุณ.
lowtechsun

9

หากคุณใช้http: //ตามที่แนะนำคุณจะอ่านได้เฉพาะสคริปต์ PHP เท่านั้น คุณสามารถอ่านสคริปต์ PHP ได้หากอยู่บนเซิร์ฟเวอร์เดียวกันกับสคริปต์ที่ทำงานอยู่ จากนั้นคุณสามารถใช้สิ่งที่ต้องการ

$Vdata = file_get_contents('/path/to/your/file.php");

สวัสดีสิ่งนี้จะได้รับ html แบบคงที่เท่านั้น ดูตัวอย่างนี้ ถ้านี่คือไฟล์ที่เราจะโหลด ///////////////// <? php echo ("text1"); ?> Text2 /////////////// นี่คือผลลัพธ์ที่ฉันได้รับ; //////////////////// Text2 ///////////////////
Kombuwa

@Kombuwa คุณช่วยชี้แจงคำตอบของคุณในการแก้ไขคำถามเดิมของคุณได้ไหมซึ่งคุณมีพื้นที่เพิ่มเติมในการอธิบายอย่างชัดเจน ขอบคุณ =)
เดวิดบอกว่าคืนสถานะโมนิกา

7

หากคุณต้องการโหลดไฟล์โดยไม่เรียกใช้ผ่านเว็บเซิร์ฟเวอร์สิ่งต่อไปนี้ควรใช้งานได้

$string = eval(file_get_contents("file.php"));

สิ่งนี้จะโหลดจากนั้นประเมินเนื้อหาไฟล์ ไฟล์ PHP จะต้องถูกสร้างขึ้นอย่างสมบูรณ์<?phpและ?>แท็กevalเพื่อประเมิน


ฉันชอบวิธีนี้ เพียงแค่ว่าไฟล์ของฉันไม่ได้ถูกสร้างขึ้นอย่างสมบูรณ์โดยใช้แท็ก <? php และ?> สำหรับ eval เพื่อประเมิน มีวิธีอื่น ๆ ?
ItsMeDom

ใช้ไม่ได้ถ้าคุณเขียนโค้ด php ลงใน file.php
Fernando Torres

4

ในทางทฤษฎีคุณสามารถใช้ fopen จากนั้นใช้ stream_get_contents

$stream = fopen("file.php","r");
$string = stream_get_contents($stream);
fclose($stream);

ซึ่งควรอ่านทั้งไฟล์เป็น $ string สำหรับคุณและไม่ควรประเมินไฟล์ แม้ว่าฉันจะแปลกใจที่ file_get_contents ไม่ทำงานเมื่อคุณระบุเส้นทางภายในเครื่อง ....


4

หากไฟล์ของคุณมีคำสั่งส่งคืนเช่นนี้:

<?php return array(
  'AF' => 'Afeganistão',
  'ZA' => 'África do Sul',
  ...
  'ZW' => 'Zimbabué'
);

คุณสามารถรับสิ่งนี้ให้กับตัวแปรดังนี้:

$data = include $filePath;

2
plus1 ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา
whitesiroi

3

หรือคุณสามารถเริ่มการบัฟเฟอร์เอาต์พุตทำการรวม / ต้องการจากนั้นหยุดการบัฟเฟอร์ ด้วย ob_get_contents () คุณสามารถนำสิ่งที่ส่งออกมาจากไฟล์ PHP นั้นไปเป็นตัวแปร


1

file_get_contents () จะไม่ทำงานหากเซิร์ฟเวอร์ของคุณปิดallow_url_fopen โฮสต์เว็บที่ใช้ร่วมกันส่วนใหญ่จะปิดโดยค่าเริ่มต้นเนื่องจากความเสี่ยงด้านความปลอดภัย นอกจากนี้ในPHP6ที่allow_url_fopenตัวเลือกที่จะไม่อยู่และการทำงานทั้งหมดจะทำหน้าที่เป็นหากมีการตั้ง permenantly ปิด ดังนั้นนี่จึงเป็นวิธีที่แย่มากที่จะใช้

ตัวเลือกที่ดีที่สุดของคุณที่จะใช้หากคุณกำลังเข้าถึงไฟล์ผ่าน http คือ cURL

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