[英]PHP Include file but only first few lines
我正在使用PHP包括:
< ?php include 'file1.php'; ?>
?php include 'file1.php'; ?>
我想只包含file1.php的前幾行 - 這可能嗎?
如果你真的想要include
(運行為PHP),那么只需將這些行拉出到一個新文件中:
new.php :
<?php
// line 1
// line 2
並將其包含在兩個文件中:
existing.php和other.php :
<?php
include('new.php');
...
<?php
$return_from_inc = include('file1.php');
?>
file1.php
<?php
if ($x === 1) { return 'A'; }
else { return 'B'; }
//... return ("break") running script wherever you want to
?>
根據第一行的內容,為什么不使用PHP函數?
file1.php
<?php
function what_i_want_to_include(){
//"First lines" content
}
}
existing.php
<?php
include('file1.php');
what_i_want_to_include();
?>
使用函數它是最簡單的方法。
您可以簡單地在您選擇的行上使用return
,並將控制權發送回調用文件。
如果在函數內調用,則return語句立即結束當前函數的執行,並將其參數作為函數調用的值返回。 return也將結束eval()語句或腳本文件的執行。
如果從全局范圍調用,則結束當前腳本文件的執行。 如果包含或需要當前腳本文件,則將控制權傳遞回調用文件。 此外,如果包含當前腳本文件,則返回的值將作為include調用的值返回 。 如果從主腳本文件中調用return,則腳本執行結束。 如果當前腳本文件由php.ini中的auto_prepend_file或auto_append_file配置選項命名,則該腳本文件的執行結束。
來源: PHP手冊
有幾個選項可以實現這一點,但讓我強調,如果這對您的應用程序工作是必要的,您應該考慮審查應用程序設計。
如果你以編程方式想要它,你可以抓住前面的x行並使用eval()來解析它們。 例:
$file_location = '/path/to/file.php';
$number_of_lines = 5; //
$file_array = file($file_location);
if(!$file) {
return false; // file could not be read for some reason
}
$first_lines = array_slice($file_array, 0, $number_of_lines);
$to_be_evaluated = implode('', $first_lines);
eval($to_be_evaluated);
但你不應該認為eval期望一個沒有php開始標記的字符串( <?php
),至少在開始時不是這樣。 所以你應該搜索它並在第一行(如果存在)中刪除它:
if(strpos($first_lines[0], '<?php') !== false) {
$first_lines[0] = substr(strpos($first_lines[0], '<?php') + 5);
}
另一個更好的選擇,如上所述,只需拉出所需的行,將它們保存到另一個文件,並將它們包含在兩者中。 您也可以以編程方式執行此操作,甚至可以提取所需的行並將其保存到臨時文件中。
編輯它是一個“奇怪”的問題,從某種意義上說它不應該是必要的。 你能解釋一下你究竟想做什么嗎? 最有可能我們可以提出一個不錯的選擇。
編輯
據我所知,你在文件中有很多東西,但只需要數據庫設置。 在那種情況下,把它們放在別處! 例:
的settings.php
$connection = new mysqli($host, $user, $pass, $db);
if($connection->connect_error) {
die('This failed...');
}
header.php文件
<?php require_once('settings.php'); ?>
<html>
<head>
<title>My awesome website</title>
... other stuff
</head>
other_file.php
<?php
require_once('settings.php');
$r = $connection->query('SELECT * FROM `my_table` WHERE `random_field`=`random_value`');
等等
在settings.php中,您還可以將所有內容放在函數中,以確保只在需要時執行。 您可以在示例中創建一個get_connection()
函數,該函數檢查數據庫連接是否存在,否則創建它並返回它以供使用。
根本不需要花哨的eval()
函數!
請記住,將您的申請分成一千個文件並不構成犯罪。 真的不是!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.