Autor | Zpráva | ||
---|---|---|---|
goro99 Profil |
#1 · Zasláno: 26. 1. 2014, 14:06:41
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>"; } ?> 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 |
#4 · Zasláno: 26. 1. 2014, 15:13:26 · Upravil/a: Tori
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 |
#5 · Zasláno: 26. 1. 2014, 15:36:25
jojo $slovicek je $promenecount a zbytek opravím v tom případě kde je chyba ?
|
||
peta Profil |
#6 · Zasláno: 27. 1. 2014, 08:07:18
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 |
#7 · Zasláno: 27. 1. 2014, 15:55:28
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 |
#8 · Zasláno: 27. 1. 2014, 17:47:32
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.
|
||
Časová prodleva: 3 dny
|
|||
goro99 Profil |
#9 · Zasláno: 30. 1. 2014, 23:22:56
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 |
#10 · Zasláno: 31. 1. 2014, 16:46:36
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 |
||
Alphard Profil |
#12 · Zasláno: 31. 1. 2014, 18:37:37
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 |
#13 · Zasláno: 1. 2. 2014, 12:29:11
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.'; |
||
Alphard Profil |
#14 · Zasláno: 1. 2. 2014, 13:34:36
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 |
||
goro99 Profil |
#15 · Zasláno: 1. 2. 2014, 15:07:24
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 |
#16 · Zasláno: 1. 2. 2014, 15:10:51
Řádka začínající středníkem je komentář; máš to napsané na začátkku toho souboru.
|
||
goro99 Profil |
#17 · Zasláno: 1. 2. 2014, 16:06:22
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 |
#18 · Zasláno: 1. 2. 2014, 16:18:16
Je to jen vývojový server, že? Nebál bych se
chmod -R 777 /var/www/ |
||
goro99 Profil |
#19 · Zasláno: 1. 2. 2014, 19:34:21 · Upravil/a: goro99
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 |
#20 · Zasláno: 1. 2. 2014, 23:35:21
Napadlo vás snad zkusit to s root oprávněním. Nebo ne?
|
||
goro99 Profil |
#21 · Zasláno: 2. 2. 2014, 11:32:48
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/ Nejspíš po tobě bude chtít heslo - tvé heslo; nebude vidět, když ho zadáváš. |
||
goro99 Profil |
#23 · Zasláno: 2. 2. 2014, 19:51:55
Tak už to funguje díky moc všem !
|
||
Časová prodleva: 11 let
|
0