簡體   English   中英

PHP包含文件但只有前幾行

[英]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.phpother.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM