PHP - Wyświetlanie zawartości pliku podanej przez usera

0

Witam!

Chciałbym utworzyć program, który wyświetli zawartość pliku podanego przez użytkownika w polu formularza.
Html mam zrobione, ale nie wiem jak zaimplementować php do tego. Użytkownik ma wpisać w pole formularza nazwę pliku np. plik.txt, po kliknięciu buttona Czytaj ma się wyświetlić zawartość tego pliku.
Proszę o pomoc :)

 
<!DOCTYPE html>
<html lang="PL">
<meta CHARSET="UTF-8"/>
 
 
	<head>
	<title>Obsługa plików</title> 
	</head>
 
 <body>
 
<h2>Temat: Obsługa plików</h2>
 
<form method="GET" action="skrypt.php">
 
Chciałbym utworzyć program, który wyświetli zawartość pliku podanego przez użytkownika. Plik podawany jest przez pole formularza.
 
<p>	
Nazwa pliku:<input type="text" name="a">
<input type="submit" value="Czytaj" name="wynik">
</p>
 
 </body>
 
</form>
</html>

0

Programowałeś kiedykolwiek w ogóle w PHP?

0

Tak,

już zacząłem pobić podstawę... mianowicie chcę na początku utworzyć skrypt który wyświetli zawartość pliku, ale ciągle mam problemy :(
Mam coś takiego, ale nie działa. Próbowałem też inne sposoby ale wywala błędy.

 
<?php

$file=fopen("dane.txt", "r"); 
flock($file, 1);  
$src=fgets($file, 30);
fclose($file); 


?>

Albo takie coś:

<?php

if (!file_exists('.\tekst.txt')) {
    throw new \Exception('File does not exist!');
} elseif (!is_readable('*\tekst.txt')) {
    throw new \Exception('File is unreadable!');
} elseif (!is_writable('*\tekst.txt')) {
    throw new \Exception('File is unwriteable!');
}
  
$file = file_get_contents('*\tekst.txt');
var_dump($file);

?>

Fatal error: Uncaught Exception: File does not exist! in E:\XAMPP\htdocs\Index\index.php:4 Stack trace: #0 {main} thrown in E:\XAMPP\htdocs\Index\index.php on line 4

0

Po co to .\ Ci tam?
Czy może raczej bezmyślnie skopiowałeś kod, którego zasady działania nie rozumiesz? ;-)

0

Po to żeby nie wpisywać całej ścieżki. Rozumiem działanie spokojnie.
Mam problem żeby połączyć ten formularz do wpisywania + button czytaj do wykonywania.

0

file_exists samo w sobie jest relatywne, także .\ stanowi jedynie zbędny ozdobnik mogący przysporzyć problemów z escapowaniem (\t w Twoim przypadku oznacza na przykład znak tabulatora).
Zarzuciłem Ci bezrozumne kopiowanie czyjegoś kodu, ponieważ dziwne jest, abyś znał mechanizm wyjątków w PHP, a nie kojarzył obsługi formularza - no ale cóż, co kto lubi ;-)Dane z formularzy dostępne są w superglobalnych zmiennych $_GET bądź $_POST (zależnie od metody wysyłania) - var_dumpnij sobie obydwie i zobacz jak to wygląda, a zrozumiesz mechanizm działania.

Btw, masz źle pozakańczane znaczniki w swoim HTMLu.

0

Wiadomo że może być kilka różnych podejść ale weźmy pod lupę to:

index.php

<!DOCTYPE html>
<html lang="PL">
    <head>
        <meta CHARSET="UTF-8"/>
        <title>Obsługa plików</title>
    </head>
    <body>
        <h1>Temat: Obsługa plików</h1>
        <form method="GET" action="showfile.php">
            <label name="filename">Nazwa pliku:</label>
            <input type="text" name="filename" />
            <input type="submit" value="Czytaj" name="submit" />
        </form>
     </body>
</html>

oraz showfile.php

<?php

define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);
$filename = $_GET['filename'];

$file = realpath(DOCROOT . 'files' . DIRECTORY_SEPARATOR . $filename);
    if ($file)
    {
        $contents = file_get_contents($file);
        header("Content-Type: text/plain");
        header("Cache-Control: max-age=86400, public");
        echo $contents;
    }
    else
    {
        header("HTTP/1.1 404 Not Found");
        echo 'Plik nie istnieje';
    }

Zakładam że wyświetlane pliki tekstowe są w podkatalogu files, w jakimś tam katalogu projektu.

To co mi jednak wypluwa about:cache w FF, po kilkukrotnym odświeżeniu strony wyników:

Key 	                                                            Data size  Fetch count Last Modifed 	Expires
predictor-origin:http://localhost/ 	                            0 bytes 	3 	   2016-10-23 09:18:44 	No expiration time
http://localhost/showfile.php?filename=loremipsum.txt&submit=Czytaj 2903 bytes 	3 	   2016-10-23 09:18:59 	2016-10-24 09:18:44

Natomiast gdyby to wyszukiwać przez POST w formularzu wysyłając to do showfile.php (naturalnie późniejsze odświeżenie przez prześlij ponownie) cache przeglądarki zachowuje się jak widzę inaczej...

Key 	                                  Data size  Fetch count  Last Modifed 	       Expires
predictor-origin:http://localhost/ 	  0 bytes 	3 	  2016-10-23 09:29:03  No expiration time
1477201632:http://localhost/showfile.php  2903 bytes 	0 	  2016-10-23 09:29:20  2016-10-24 09:29:20

1 użytkowników online, w tym zalogowanych: 0, gości: 1