Szerveroldalon? Dinamikusan? Semmit. Nem fog menni, mivel miután legenerálódott a kimenet a szerveren, onnantól kezdve, hogy a user mit ügyködik az inputoddal az nem a szerver dolga (majd submit után megkapja). Inkább a comm._HTML függvényedet okosítsd fel, hogy az kérje le a kívánt/megadott mezőből (tk. az upload mezőből) az értéket: pl. jQuery-vel $('#upload').val()
Na, egy frissen telepített 2.4-essel kipróbáltam, a következőkkel:
- (sudo) a2enmod cgi
- az /etc/apache2/sites-enabled/000-default.conf-ban az /Include conf-available/serve-cgi-bin.conf elől ki kell venni a kommentet
- átírtam a cgi-k helyét az /etc/apache2/conf-enabled/serve-cgi-bin.conf-ban /var/www/cgi-bin-re (alapból a /usr/lib/cgi-bin van bekonfigolva, azzal is megy)
- a pythonos és c-s (lefordítva, cgi-s kiterjesztéssel, pl. helloworld.cgi) kódokat a fenti könyvtárba raktam Ennyi, az /etc/apache2/apache2.conf-ot nem kellett módosítani (nincs is benne semmi cgi-re utaló részlet)
Na ez az. Az a dir nálam üres. Emiatt aztán érthető, hogy sehol sem van httpd.conf
/usr/local/etc/apache2/httpd.conf
Kedves Teve. Nem akarlak tovább dolgoztatni, holnap egy másik helyen újra nekibuzdulok, és ha jutok valamire, ideírom, de addig is köszönöm a segítséget.
Közben egyébként visszakézből föltettem régebbi disztrókat (5 félét) , és megnéztem, azok milyen config fájlokat tartalmaznak, de e tekintetben azt látom, mind ugyanazt. Perpill más okból szünetelek, mert valami okból az a szerver nem müx (talán vasárnap van, vagy mi a szösz) ahonnan az apt-get installálja az apache-t. Nem érdekes, ráér holnap is.
De a lényeg, hogy úgy tűnik nekem, verzióváltások lehettek mert az össze tutorial és diszkussziós weboldal egyöntetűen azt mondja, hogy annak megadása, hogy a cgi progik HOL legyenek és hogy ezeket FUTTATNI kell, a httpd.conf file-ban kell legyen.
Ámde viszont ilyen fájl nincs, helyette az pache-ra vonatkozóan néhány másik van:
Persze, kicseréltem. Ámbár, azt írják, hogy ha a configban meg van adva egy adott directory amiben az apache a cgi-ket keresi, akkor aakor is végrehajtja, ha nem .cgi a kiterjesztés.
Köszönöm. De sajnos próbáltam több hasonlóan ésszerű helyre is betenni, de akkor se megy.
Szóval azt szedtem össze hogy az csak az alapeset hogy az ilyen (html és cgi) fájlok ide kerüljenek:
/var/www/html
Ezt csak azért javasolják, hogy a rootban lévén védettek legyenek. De lehet máshova is, csak az apache config-ban meg kell adni, hol.
A gond, hogy az itt levő: /etc/apache2/apache2.conf file-ban ugyan szerepel az elérési út, és tehetek be saját elérési utat is, de úgy néz ki, akkor sem "futtatja" a cgi-ket (másik gépről meghívva), hanem csakis a html-eket. Ami nem html, azt csak listázza azaz a forráskódot nyomja ki. Sőt, ha az pl c-ban íródott, akkor listázni sem tudja, hanem felkínálja az elmentést.
Valami olyasmi hiányzik neki ami utasítja ill. engedélyezi, hogy futtassa.
Talán legjobb lenne, ha a /home/userneved/public_html-be telepítenéd a programokat, ezanave.cgi néven (unix-ban a amúgysem a fájlnév számít, hanem a tartalom)
Ez gcc-vel szépen lefordul, lesz ugye belőle mondjuk a "hello" futtatható program. Csekkoltam hogy futtatható és konzolra szépen kiírja a HTML anyagot, persze csak mint stringet.
Namost az kéne, hogy ez egy CGI progit alkosson és egy remote gépről meghívva megjelenítse mint weblapot.Ehhez ugye az kell hogy fönn legyen az apache2 (fönn van) Ez egy sima statikus HTML Javascript file-t rendesen meg is jelenít gond nélkül a remote gépen, tehát a szerver funkció alapesetben müx. Deviszont a fenti CGI csak úgy müx hogy a remote böngészőben csak felugró ablakban megkérdezi, mit csináljon evvel, vagy hova savelje el. Tehát nem hajtja végre.
Ugyanezt megcsináltam pythonban és bash shellben. Például ez utóbbi:
-----------------------------------
#!/bin/bash
echo -e "Content-type: text/htmlnn"
echo "<h1>Hello World</h1>"
-----------------------------------
Ennél is megolt a futtathatóvá tétel, de a remote böngészőben csak a forrásszöveg listázása látható, nem pedig az elvárt:
Hello World
Namost, a végén mindezt root-ból csináltam tehát hozzáférési probléma nincs. A cgi progik (a fenti 3 féle) itt vannak az ajánlás szerint:
/var/www/
De tudom, hogy lehet még a
/var/www/html
/var/www/cgi-bin
helyeken, és máshol is, feltéve hogy az apache konfigurációban lehetővé tesszük. Itt lehet a bibi. Fórumokon erre az egészre azt írják, hogy alapesetben nem futtat cgi-ket, hanem direkt elő kell írni ezt a következőképpen:
Vagyis: az Options engedélyezi a végrehajtást cgi python perl és php progikra. Na de ellentmondásokat olvastam arról, hogy pontosan MELYIK konfig file-ban kell ezt megadnom. Ezek jönnek szóba:
/etc/apache2/apache2.conf
/etc/apache2/sites-enabled/000-default.conf
De sajnos nem müx a dolog. Nem elsőre kérek segítséget, már átrágtam magam sok helpen és tutorial-on. Ha vki segítene, mit nézek el, asszem valami banális dolog.
Én sajnos nem vagyok programozó, nem értek egyik programozási nyelvhez sem, csupán egy perl programot szeretnék lefuttatni, de elakadtam benne. :(
Létezik egy építgetős játék, melyben egész országokat is felépíthetünk kellő kitartással. Egy fórumon találtam egy perl programot, mely azt ígéri, hogy az openstreetmap térképből képes a játék számára pályát építeni. Sajnos azonban se nekem, se másnak nem működik a perl program, vég nélkül fájlokat gyárt egy cache nevű könyvtárba, melyeknek a tartalma csupán ennyi:
Can't connect to 78.46.81.38:80 (10061)
LWP::Protocol::http::Socket: connect: 10061 at C:/strawberry/perl/vendor/lib/LWP/Protocol/http.pm line 51.
Most ez a program hibája vajon, vagy a perl keretrendszeré?
Mely nyomon elindultam: valami a fork körül nem stimm, mert ha vizsgálom a pid-et, és ha azt mondom, ha 0 az a child akkor nem áll le a child, ha azt mondom
if ($pid) {
echo "ez a gyerek";
}
akkor működik, és nem lesz zombi child process, csak épp ez így nem jó.. az álmoskönyv szerint
a másik, hogy tehát ez egy tcp server, és most sima telnettel megyek rá másik terminálról, majd pedig ha csinálok olyat, hogy mondok egy "quit"-et a kliensből, erre a server elköszön és sock_close($sock), akkor a kliens úgy marad, de csak addig, míg nem jön egy következő connect egy másik terminálról, mert akkor rendesen ki is lép.
Most visszatértem a php-hez, és ue.. már nincs zombi gyerek, ha a pid-nek csak a létezését vizsgálom, de bent ragad a kapcsolat, tehát a socket nem záródik be, míg nem jön a következő kapás.
NA! az shm dolgot félre kellett raknom, bár már nincs egy évem mint mikor elkezdtem, tehát foglalkoznom kell majd vele, mert nem lesz házvezérlésem :(
No, de most majdnem ehhez kapolódóan, van a tcp server, amit eleve meg-fork-olok, hogy démonná váljon, majd pedig egy listener lesz, ami várja a lúzereket..
ha, jön egy akkor fork, hogy a listener tovább tudja fogadni az adott porton a kapást, és a gyerek processzbe meg teszek veszek.
Mikor a gyerekről lebont a lúzer a gyerekből zombi lesz :( miért???????
Előszőr php-val kezdtem, belefutottam ebbe, olvastam ... sokat.. mondták, hogy ez bug, másik, hogy ez nem bug.. kell egy pcnlt_waitpid() (valahová, nem értettem meg mikor, és hová) feladtam.. jó akkor perl.. de ugyan az.
Tehát valahol az alapoknál van velem a gond, de hol?
itt egy perl példa:
$SIG{INT} = sub { die "$$ dyingn" };
use IO::Socket::INET; use Sys::Syslog;
# flush after every write $| = 1;
$serv_port = '10001'; $serv_ip = '192.168.1.250';
my ($socket,$client_socket); my ($peeraddress,$peerport);
$socket = new IO::Socket::INET ( LocalHost => $serv_ip, LocalPort => $serv_port, Proto => 'tcp', Listen => 5, Reuse => 1 ) or die "ERROR in Socket Creation : $!n";
print "Server Waiting for client connection on $serv_ip:$serv_portn";
Egy barátom azt mondta, hogy ne foglalkozzak vele, ott van a /dev/shm.. simán IO::-val hozzak létre file-t, a file neve lesz a kapcsolat, és bárki tudja írni, olvasni, aki ismeri a file nevét.