Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zapisywanie danych do pliku
Forum PHP.pl > Forum > Przedszkole
robin5hood
mam kod, chce zapisac dane do pliku ale jest bład, nie wiem jaki
Kod
<?php
    $student[0]=array('Zofia','Kamińska','00-567','Warszawa ');  
    $student[1]=array('Jan','Nowak','00-567','Warszawa');  
    $student[2]=array('Jerzy','Trela','00-567','Warszawa');  
    $student[3]=array('Roman','Polański','88-555','Kraków');    
    $num=$count($student);
    $fp = fopen('file.csv', 'w');
    for($i=0;$i<$num;$i++)
        {fputcsv($fp, $student[$i],';');}
    fclose($fp);
    echo "Zapisano dane. <br/>";
?>
ziqzaq
Spacja w ścieżce do pliku.
Jak masz ustawione error_reporting = E_ALL to jak byk widać, że skrypt nie widzi pliku i sypie ostrzeżeniami.

Edit:
Przed edycją kod kolegi wyglądał tak:
  1. <?php
  2. $student[0]=array('zofia','kdjf','0439','kjvj');
  3. $student[1]=array('zofia','kdjf','0439','kjvj');
  4. $student[2]=array('zofia','kdjf','0439','kjvj');
  5. $student[3]=array('zofia','kdjf','0439','kjvj');
  6. $num=count($student);
  7. $fp=fopen(' ./nic2.csv', 'w'); // <== felerna spacja
  8. for ($i=0; $i<$num; $i++){fputcsv($fp, $student[$i], ';');}
  9. fclose($fp);
  10. echo "zapisano dane";
  11. ?>
robin5hood
w tej linice
Kod
$fp = fopen('file.csv', 'w');

co mam zmienić, o jaka spacje chodzi? wstydnis.gif

zlikwidowałem te spacje
Kod
<?php
$student[0]=array('zofia','kdjf','0439','kjvj');
$student[1]=array('zofia','kdjf','0439','kjvj');
$student[2]=array('zofia','kdjf','0439','kjvj');
$student[3]=array('zofia','kdjf','0439','kjvj');
$num=count($student);
$fp=fopen('./nic2.csv','w'); // <== felerna spacja
for ($i=0; $i<$num; $i++){fputcsv($fp, $student[$i], ';');}
fclose($fp);
echo "zapisano dane";
?>
ale nadal ten sam błąd
ziqzaq
Mi kod działa (oprócz tej spacji, którą później usunąłeś).
Możliwości:
1) Plik nie istnieje, lub ścieżka jest zła.
2) Plik nie ma ustawionych praw do zapisu.

Edit:
Jaki błąd? Skoro nie wkleiłeś kodu błędu to skąd ktoś ma wiedzieć jaki to błąd?
Pomyśl chwilę, proszę.
robin5hood
a czy ten kod nie powinien tworzyć pliku?
bład jest taki
Fatal error: Call to undefined function fputcsv() in C:\Program Files\Apache Group\Apache2\htdocs\zapisywanie.php on line 8
ziqzaq
Manual fopen.
Przeczytaj opisy parametru "tryb" (podpowiem, literki to "w" i "a").

Edit:
Znowu manual fputcsv
Cytat
(PHP 5 >= 5.1.0)

Jaką masz wersję php?
robin5hood
"w" otwiera plik, a jesli go nie ma, tworzy go
a jak sprawdzić jak jest wersja PHP , chyba 5 wstydnis.gif
ziqzaq
Racja. Cały czas myślałem o prawach do zapisu i bzdury napisałem.
Co z wersją php?

Edit:
  1. <?php
  2. ?>
robin5hood
PHP Version 5.0.3 - taka jest wersja
ziqzaq
Ok. Czyli dla ciebie ta funkcja jest niedostępna.
Co możesz zrobić?
1). Zainstaluj nowszą wersję php.
lub
2). Użyj funkcji dostępnej w komentarzach fputcsv (wziąłem tą z pierwszego komentarza, nie sprawdzałem jej)
  1. <?php
  2. function fputcsv2 ($fh, array $fields, $delimiter = ',', $enclosure = '"', $mysql_null = false) {
  3.    $delimiter_esc = preg_quote($delimiter, '/');
  4.    $enclosure_esc = preg_quote($enclosure, '/');
  5.  
  6.    $output = array();
  7.    foreach ($fields as $field) {
  8.        if ($field === null && $mysql_null) {
  9.            $output[] = 'NULL';
  10.            continue;
  11.        }
  12.  
  13.        $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|s)/", $field) ? (
  14.            $enclosure . str_replace($enclosure, $enclosure . $enclosure, $field) . $enclosure
  15.        ) : $field;
  16.    }
  17.  
  18.    fwrite($fh, join($delimiter, $output) . "\n");
  19. }
  20. ?>
Pilsener
Cytat
"w" otwiera plik, a jesli go nie ma, tworzy go
- z tym bym się tak nie rozpędzał - na wielu "super" hostingach tworzenie plików "w locie" przez fopen podlega restrykcjom. Należy postępować (mniej więcej) tak:

1. Sprawdzić, czy mamy odpowiednie prawa do miejsca, gdzie chcemy zapisać/utworzyć plik, jeśli nie, to error
2. Sprawdzić, czy plik istnieje - jeśli nie powołać go do życia funkcją touch()
3. Sprawdzić, czy mamy prawo zapisu do pliku - jeśli nie, spróbować je nadać (chmod), jeśli się nie uda - to error
4. Otworzyć plik i ZABLOKOWAĆ na czas zapisu - sprawdzić, czy udało się go otworzyć, jak nie to error
5. Zapisać dane i zamknąć plik - sprawdzić, czy się udało, jak nie to error
6. Dla pewności porównać datę i rozmiar przed i po zapisaniu - w dobrym tonie jest wywalić komunikat: "ostatnia modyfikacja 23 dni temu, dodano 2345 bajtów" itp. etc.

7. Jeśli używamy wynalazków typu fputcsv dostępnych od wersji PHP 5.1+, należy sprawdzić, czy taka funkcja istnieje - function_exists i wywalić error, lub zrealizować kod "B".

Inaczej zamiast oglądać "W Pustynii i w Puszczy" będziesz szukał błędów. A jak skrypt napisał ktoś inny lub Ty rok temu? Nieprędko usiądziesz przed TV z czipsami w ręku.
robin5hood
spróbuje zainstalować nową wersje
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.