Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie w pliku
Forum PHP.pl > Forum > PHP
Leni2991
Witam. Na wstępie oznajmię, że jestem początkujący w programowaniu PHP, więc mój skrypt pewnie wyda się niektórym dość śmieszny. Jeśli ktoś zna lepszy sposób na wykonanie tej samej czynności, to chętnie posłucham (czytać: przeczytam) rad. A więc do rzeczy:

Pracuję nad skryptem, który wyciągnie dla mnie informacje z pliku tekstowego zapisanego przez Windowsowy DxDiag. Problem polega na tym, że jakkolwiek nie mam problemu z odnalezieniem różnych informacji i przypisanie ich do zmiennych sesyjnych, tak nie udaje mi się wyszukać informacji o całkowitej pojemności partycji. Teraz trochę kodów:

1. Skrypt trochę zmieniony, by było łatwiej znaleźć błąd:
  1. <?php
  2. $plik=nl2br(file_get_contents("http://czatowo.pl/upload/uploads/1585461310.txt"));
  3. $plik=explode("<br />", $plik);
  4. for ($i=1; $i<999; $i++){
  5. $linia=explode(" ", $plik[$i]);
  6. for ($j=1; $j<50; $j++){
  7. if ($linia[$j]=='Drive:' && !isset($hard1_name)){
  8. $x=count($linia);
  9. for ($z=$j+1; $z<=$x; $z++){
  10. $hard1_name.=$linia[$z].' ';}
  11. $_SESSION['hard1_name']=$hard1_name;
  12. $hard1_line=$i;
  13. }
  14. }
  15. for ($j=1; $j<50; $j++){
  16. if ($linia[$j]=='Free' && $linia[$j+1]=='Space:' && $hard1_line+1==$i){
  17. $hard1_free_space.=$linia[$j+2].' ';
  18. $_SESSION['hard1_free_space']=$hard1_free_space;
  19. }
  20. }
  21. for ($j=0; $j<50; $j++){
  22. if ($linia[$j]=='Total' && $linia[$j+1]=='Space:' && $hard1_line+2==$i){
  23. $hard1_total_space.=$linia[$j+2].' ';
  24. $_SESSION['hard1_total']=$hard1_total_space;
  25. }
  26. }
  27. }
  28. echo ("Nazwa: {$_SESSION['hard1_name']}<br>Wolne: {$_SESSION['hard1_free_space']}<br>Cale: {$_SESSION['hard1_total_space']}");
  29. ?>


2. Kawałek pliku z DxDiag (całość do wglądu w linku w skrypcie):
Drive: C:
Free Space: 29.2 GB
Total Space: 38.2 GB
File System: NTFS
Model: ST380013AS


3. Efekt wykonania skryptu:
Nazwa: C:
Wolne: 29.2
Cale:


Z góry dziękuję za okazaną pomoc lub nawet chęć jej udzielenia. smile.gif
BaN
Moim zdaniem przekombinowałeś, bo dzielisz na wiersze i wyrazy oraz sprawdzasz poszczególne wyrazy, nie chce mi się sprawdzać co jest źle
Wystarczy zauważyć w jaki sposób zapisywane są dane o dyskach, zaczynają się od ' Drive: ', kończą się pustym wierszem
Nie wiem po co zapamiętujesz te dane w sesji, najwyżej dostosuj poniższy kod do Twoich wymagań
  1. $drives = array();
  2. $file = @fopen('http://czatowo.pl/upload/uploads/1585461310.txt', 'r');
  3. if ($file) {
  4. $drive = '';
  5. while (($line = fgets($file)) !== false) {
  6. if (strlen($drive) > 0) {
  7. if (trim($line) == '') {
  8. $drive = '';
  9. }
  10. else {
  11. $parts = array_map('trim', explode(': ', $line));
  12. if (isset($drives[$drive][$parts[0]])) {
  13. $drives[$drive][$parts[0]] = $parts[1];
  14. }
  15. }
  16. }
  17. elseif (strpos($line, ' Drive: ') !== false) {
  18. $drive = trim(substr($line, 13));
  19. $drives[$drive] = array(
  20. 'Free Space' => '?',
  21. 'Total Space' => '?'
  22. );
  23. }
  24. }
  25. fclose($file);
  26. }
  27. print_r($drives);

edit: dodałem trim(): if (trim($line) == '') {
webdice
Zainteresuj się wyrażeniami regularnymi. W szczególności preg_match.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.