Autor Zpráva
goro99
Profil
Ahoj,
Programoval jsem stránky v PHP na intranet a zkoušel jsem si to vždy spustit v na localhostu (mám win 8.1) a pak jsem nahrál stránky na apache server na linux (na raspberry pi) a stránky se sice zobrazují ale nefunguje zapisování do txt souborů. Tak nevím co mám dělat jestli něco nastvait v configu opravdu nevím.
Díkes za odpovědi
Tori
Profil
Máte správně nastavené cesty k souborům (ideálně absolutní)? Nastavená přístupová práva pro zápis pro uživatele, pod kterým běží apache? Pokud oboje ano, ukažte třeba tu část skriptu, kterou zapisujete.
edit: chyby to žádné nehlásí?
goro99
Profil
Cesty jsou správně, absolutní sice ne, tak to ještě vyzkouším a přístupová práva snad taky nejdřív mě to nechtělo pustit zkoupárovat do /var/www ty stránky ale to jsem nastavil a pod tím stejným uživatelem apache beží.
Skriptů kde se zapisuje je tam víc tohle je jeden z nich:
<?php
      $f=fopen("xyz.txt", "a");
      $x=$_POST['x'];
      $y=$_POST['y'];
      $z=$_POST['z'];
      $a=$_POST['a'];
      $b=$_POST['b'];
      $c=$_POST['c'];
      if ($a==""||$b==""||$c==""||$x==""||$y==""||$z=="")
      {
      echo "something is wrong";
      echo "<br>"; 
      echo "<a href=add.php>Back</a>";
      }
      else
      {
      fwrite($f, $a);
      fwrite($f, "=");
      fwrite($f, $x);
      fwrite($f, ";");
      fwrite($f, $b);
      fwrite($f, "="); 
      fwrite($f, $y);
      fwrite($f, ";");
      fwrite($f, $c);
      fwrite($f, "=");
      fwrite($f, $z);      
      fwrite($f, ";");
      fwrite($f, "@");
      fclose($f);
      
      //tohle uz je jen zalohovani
      
      
      $osouboru=file_get_contents('xyz.txt');
      $promene=explode(";",$osouboru);
      $promenecount=(count($promene))-1;
      $datum=date("d_m_Y");
      if (($slovicek%6)==0)
      {
      $f = fopen("zaloha_".$datum.".txt","wb");
      fwrite($f,$osouboru);
      fclose($f);
      } 
      echo "Saved";
      echo "<br>"; 
      echo "<a href=index.php>Backn</a>";
      } 
    ?>
edit: žádné chyby to nepíše


Tak jsem tam zkusil dát absolutní cetsu a stejně to nefunguje jo a ještě něco zapisuje do souboru pomocí f write a něco pomocí file_put_contents (a absolutní adresu jsem zkoušel dávat u toho file_put_contents)
Tori
Profil
Místo řádků 41-3 by šlo použít file_put_contents, ř.2 by měl být až ve větvi else (před ř.17), a nemá místo $slovicek být $promenecount? Jinak to, až na ty relativní cesty, vypadá ok.


Kdyžtak ověřte zapisovatelnost ve skriptu - is_writable na cílový adresář.
goro99
Profil
jojo $slovicek je $promenecount a zbytek opravím v tom případě kde je chyba ?
peta
Profil
goro99:
Bylo by fajn vety oddelovat carkou nebo teckou.
"nejdřív mě to nechtělo pustit zkoupárovat do /var/www ty stránky"
To jsi zkousel pres FTP nebo jako bezny linux uzivatel? Protoze pro zobrazeni stranek je treba nastavit prava na souborech, slozkach pro apache uzivatele a povolit mu zapis do souboru, pripadne vytvareni souboru. Default je nastaveno na linuxu, ze nemuze php vytvaret adresare ani soubory. Proc? Protoze php uzivatel (apache) ma pristup k cele rade systemovych funkci a adresaru.
Mozna to pujde udelat pres php chmod nebo pak jedine pres linux uzivatele.
goro99
Profil
Zkoušel jsem to jako linux uživatel, takže je chyba asi jak řikáte v tom že php na to nemá práva. Mohli by jste mi prosím napsat kde mám toto oprávnění nastavit protože z výrazu php chmod si jako lajk nic nevezmu, díky moc
Tori
Profil
goro99:
Má se zapisovat do adresáře, ve kterém je i ten skript, ano? A zkusil jste na začátek skriptu přidat něco jako echo "Tento adresář ".(is_writable(__DIR__) ? "je" : "není")." zapisovatelný"; , co to vypíše? chmod viz manuál, jsou tam příklady.
goro99
Profil
Promiňte za časovou prodlevu nemám nějak moc čas a když čas mám zase mi blbne wifi. Vyzkouším to zítra.
goro99
Profil
Tak to píše, že adresář zapisovatelný je ovšem zapisovat to nechce.
Tori
Profil
Ani s absolutní cestou?
      $x=$_POST['x'];
      $y=$_POST['y'];
      $z=$_POST['z'];
      $a=$_POST['a'];
      $b=$_POST['b'];
      $c=$_POST['c'];
      if ($a==""||$b==""||$c==""||$x==""||$y==""||$z=="")
      {
      echo "something is wrong";
      echo "<br>"; 
      echo "<a href=add.php>Back</a>";
      }
      else
      {
             $str = "$a=$x;$b=$y;$c=$z;@";
             if (!file_put_contents(__DIR__."/xyz.txt", $str, FILE_APPEND)) {
                    echo 'Data byla v pořádku, ale nezapsala se.';
             else echo 'Ok.';

      //tohle uz je jen zalohovani
      
edit: a zadaný text to připíše na konec, od toho je tam flag FILE_APPEND.
Alphard
Profil
goro99:
Za celou dobu jste sem nezkopíroval žádnou chybovou hlášku. Opravdu se vám chyby zobrazují, když třeba uděláte překlep v syntaxi?
goro99
Profil
Ani s absolutní cestou to nezapisuje
             $str = "$a=$x;$b=$y;$c=$z;@";
             if (!file_put_contents(__DIR__."/xyz.txt", $str, FILE_APPEND)) {
                    echo 'Data byla v pořádku, ale nezapsala se.';
             else echo 'Ok.';
jen z tohohle nejsem moc moudrej a taky nevím jestli to celý soubor přepíše a zapíše tam jen to $str a nebo to $str připíše nakonec, já totiž potřebuju aby to připsalo na konec. A jinak to chybové hlášky nějak nezobrazuje to jsem si všiml až teď protože jsem to psal na windows.
Alphard
Profil
goro99:
A jinak to chybové hlášky nějak nezobrazuje to jsem si všiml až teď protože jsem to psal na windows.
Předpokládám, že je to vývojový server, takže v php.ini nastavit
error_reporting = E_ALL
display_errors = On
restartovat a zkusit znovu.
goro99
Profil
Nevím jestli je to správně ale nastavil jsem v /etc/php5/apache2/php.ini tohle

; display_errors
; Default Value: On
; Development Value: On
; Production Value: On

; display_startup_errors
; Default Value: Off
; Development Value: On
; Production Value: Off

; error_reporting
; Default Value: E_ALL
; Development Value: E_ALL
; Production Value: E_ALL

ale chyby to stále nezobrazuje
juriad
Profil
Řádka začínající středníkem je komentář; máš to napsané na začátkku toho souboru.
goro99
Profil
Tak už se mi povedlo nastavit aby to psalo ty chyby

Warning: fopen(/var/www/xyz.txt): failed to open stream: Permission denied in /var/www/zapsat.php on line 18
Alphard
Profil
Je to jen vývojový server, že? Nebál bych se
chmod -R 777 /var/www/
goro99
Profil
Nevím co myslíte tím vývojový server, ale je to Raspberry Pi na kterém běži printserver a tohle apache a v zásadě jestli se někdo dostane na ten intranet tak je to v celku jedno. Vyzkouším a napíšu.


chmod: changing permissions of '/var/www': Operation not permitted


tohle to píše
Alphard
Profil
Napadlo vás snad zkusit to s root oprávněním. Nebo ne?
goro99
Profil
S linuxem vůbec neumím mohl by jste mi napsat přesnější postup nebo příkaz, děkuji.
juriad
Profil
sudo chmod -R 777 /var/www/
Sudo znamená: spusť následující příkaz jako jiný uživatel; pokud není uvedeno jinak, spusť jako root (něco jako Administrátor).
Nejspíš po tobě bude chtít heslo - tvé heslo; nebude vidět, když ho zadáváš.
goro99
Profil
Tak už to funguje díky moc všem !

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: