2017-01-01 91 views
0

我有一個PHP腳本,從文件fileRead2.php中調用函數fileRead2函數。PHP變量var_dump = NULL?

下面的函數讀取username.txt(哪個顯示是用戶名)。

VIM fileRead2.php

<?php 
function fileRead2() { 
    global $fh, $line;  
    $fh = fopen('username.txt','r'); 
    while ($line = fgets($fh)) { 
     // <... Do your work with the line ...> 
     echo($line); 
    } 
    fclose($fh); 
} 
?> 

如果我上運行的Linux文件系統的Linux命令貓是本屆展會的 'tjones'(用戶名)。

我運行下面的腳本中。

<?php 
// Read the Username 
require_once('fileread2.php'); 

$userName = fileRead2(); 
echo $userName; 
var_dump($userName); 
>? 

它呼應的$userName該顯示器的「tj​​ones」不過的var_dump展示的其作爲NULL輸出。

是否有任何理由爲什麼var_dump將$userName變量顯示爲NULL,當它應該是字符串'tjones'?

我問的原因是因爲我需要變量$userName;代碼的其他部分,因爲它是NULL沒有別的工作,我不知道爲什麼?

+1

'var_dump'輸出本身,你不需要用'echo'使用它。 – Matthew

回答

2

你需要修改fileRead2.php使用的return代替echo

<?php 

function fileRead2() { 

global $fh, $line;  

$fh = fopen('username.txt','r'); 

$lineReturn = ""; 

while ($line = fgets($fh)) { 
    // <... Do your work with the line ...> 
    $lineReturn = $line; 
} 
fclose($fh); 

return $lineReturn; 

} 

?> 

echo用於發送信息到標準輸出 - 這是什麼意思是,如果你在運行一個PHP腳本終端和使用回聲,它將被髮送到終端(假設你不在其他地方重定向標準輸出);如果您使用php腳本生成網頁內容,它會將信息輸出到瀏覽器(這是一種簡化)。

另一方面,返回函數用於在函數外部向函數外的代碼塊發送信息。所以在你的情況下,你希望函數fileRead2從username.txt文件中讀取,然後返回第一行(用戶名),這樣你就可以設置一個在函數之外的變量。爲了做到這一點,你必須使用return

另外還有一點需要注意的是,如果除了將$ line變量設置爲fgets輸出並且用戶名位於username.txt文件的第一行之外,如果您沒有對線進行額外的「工作」不需要一段時間循環。相反,你可以只做$line = fgets($fh);,然後關閉文件並返回$line變量。

+0

返回$行將返回false –

+1

@KrisRoofe謝謝!固定,但我承認這不是最好的結構。我不確定OP在線上究竟做了什麼,所以我不確定重構代碼是否合理。 – VKK

0

您的函數fileRead2()沒有返回子句,所以它返回類型void。並且var_dump()的返回類型也是void

所以

$userName爲空,所以echo $userName輸出什麼。

var_dump($username)將輸出NULL。

echo var_dump($userName)什麼也沒有輸出。

並在代碼中的readfile2只需添加return $line;將返回false