2017-01-01 3 views
0

У меня есть скрипт PHP, который вызывает функцию fileRead2 из файла fileRead2.php.PHP переменная var_dump = NULL?

Функция ниже читает username.txt (какой из них является именем пользователя).

ВИМ 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 этого дисплея «» tjones однако 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 для создания веб-контента, он выводит информацию в браузер (это упрощение).

Возврат с другой стороны используется внутри функций для отправки информации в блоки кода вне функции. Поэтому в вашем случае вы хотите, чтобы функция fileRead2 считывалась из файла username.txt, а затем возвращала первую строку (имя пользователя), чтобы вы могли установить переменную, которая находится за пределами функции. Для этого вам нужно использовать return.

В качестве другой заметки, если вы не выполняете никаких дополнительных «работ» на линии, не устанавливая переменную $ line на вывод fgets, а имя пользователя находится в первой строке файла username.txt, Мне нужен цикл while. Вместо этого вы можете просто сделать $line = fgets($fh);, а затем, конечно, закрыть файл и вернуть переменную $line.

+0

return $ line просто вернет 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; возвратит ложные

Смежные вопросы