Keresés

Részletes keresés

_szergej_ Creative Commons License 2016.02.23 0 0 2646

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()

Előzmény: gergerg (2645)
gergerg Creative Commons License 2016.02.22 0 0 2645

Sziasztok!

 

Mit kellene tennem hogy a piros kérdőjel helyére bekerüljön a szövegmező tartalma? 

 

 

<p>Weben található képek beszúrása</p>

<fieldset class="fields2">
<dl>
<dt><label for="upload">A kép url-je:</label></dt>
<dd>
<input type="text" name="upload" id="upload" value=" " class="inputbox autowidth" /> 
<input type="button" value="Webkép beillesztése a hozzászólásba" onclick="comm._HTML('<img width=160 align=left hspace=10 src=','/>','?');"class="button2" /> &nbsp;
</dd>
</dl>

</fieldset>

HA5COI Creative Commons License 2016.01.18 0 0 2644

Nevem Teve

Neked is köszi. Szal most ezekben a verziókban ez van ahogyan szimatoltam és ahogy szergej rámutatott. Persze lefogadom, lesz majd még problémám :-)

Előzmény: NevemTeve (2641)
HA5COI Creative Commons License 2016.01.18 0 0 2643

_szergej_

 

Köszönöm szépen. Így ahogy írtad, most minden jó. Sőt, ha az elérési utak jók, akkor nem is kell .cgi-re átítni a kiterjesztést, úgy is rendesen müx.

Még csak .c forrásból fordított és PHP-ben írottat próbáltam, mindkettővel jó.

Majd még pythont is megpróbálom, de nekem a c is elég lesz.

 

Még egyszer köszönöm.

Előzmény: _szergej_ (2642)
_szergej_ Creative Commons License 2016.01.18 0 0 2642

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)

  <IfDefine ENABLE_USR_LIB_CGI_BIN>
    ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    <Directory "/var/www/cgi-bin">

- 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)

 

Ezután a http://localhost/cgi-bin/script.py és http://localhost/cgi-bin/helloworld.cgi url-eket böngészőben megnyitva nálam a kívánt tartalom jelenik meg. Az apache logjaiban nincs valami érdemleges? (Bár végül is a kérést kiszolgálja...)

Előzmény: HA5COI (2639)
NevemTeve Creative Commons License 2016.01.17 0 0 2641

Nyilván a disztibutor jónak látta felkavarni az Apache beállításait. Végső ötlet:

strace httpd -t 2>&1 | grep conf

nem valami kifinomult módszer, de esetleg kiderül belőle, hogy milyen konfig-fájlt használ.

Előzmény: HA5COI (2640)
HA5COI Creative Commons License 2016.01.17 0 0 2640

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.

Előzmény: NevemTeve (2638)
HA5COI Creative Commons License 2016.01.17 0 0 2639

apache/2.4.10

Előzmény: _szergej_ (2637)
NevemTeve Creative Commons License 2016.01.17 0 0 2638

No, most megnéztem a céges gépemen,

van egy

/usr/local/etc/apache2/httpd.conf; benne

 

<IfModule mime_module>
    AddHandler cgi-script .cgi
</IfModule>

...

UserDir public_html
<Directory "/home/*/public_html">
    ...

    Options ExecCgi

    ...
</Directory>

valamint

~/public_html/.htaccess; benne

Options +ExecCGI
meg van egy ~/public_html/valami.cgi, 0755 jogokkal; így lehet kipróbálni:

$ wget 127.0.0.1/~NevemTeve/valami.cgi

 

Előzmény: NevemTeve (2631)
_szergej_ Creative Commons License 2016.01.17 0 0 2637

Mi az Apache pontos verziója?

Előzmény: HA5COI (2630)
HA5COI Creative Commons License 2016.01.17 0 0 2636

Igen. Lámának láma vagyok, de annyira nem :-)

 

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:

 

/etc/apache2/apache2.conf

/etc/apache2/sites-enabled/000-default.conf

 

és nyilván fontos még:

 

/etc/apache2/conf-available/serve-cgi-bin.conf

 

Ezekkel vacakolok majd holnap.

Előzmény: NevemTeve (2635)
NevemTeve Creative Commons License 2016.01.17 0 0 2635

Jogbitek 0755-re beállítvák?

HA5COI Creative Commons License 2016.01.17 0 0 2634

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.

 

Előzmény: NevemTeve (2633)
NevemTeve Creative Commons License 2016.01.16 0 0 2633

A kiterjesztést kicserélted .cgi -re? És miért nem?

Előzmény: HA5COI (2632)
HA5COI Creative Commons License 2016.01.15 0 0 2632

Nevem Teve

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.

Előzmény: NevemTeve (2631)
NevemTeve Creative Commons License 2016.01.15 0 0 2631

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)

Előzmény: HA5COI (2630)
HA5COI Creative Commons License 2016.01.14 0 0 2630

Segítségeteket kérem egy feltehetően lámaságom miatt fennálló problémámban.

 

Rendszer: Linux Mint 17.3 most telepítettem, azelőtt az előző verziók voltak. Fel van telepítve apache2 és a gcc fordító, a python 2.7.6.

 

Cél: eleinte egy komplexebb mini server, de most visszahátráltam a "hello World" szintre :-)

CGI program kellene, amit első bébi szinten egy c nyelvű demi képezne, például:

 

--------------------------------------------------------------

#include <stdio.h>

void main(int argc, char *argv[])
{
    printf("Content-type: text/htmlnn");

    printf("<html>");
    printf("<head>");
    printf("<title>Test</title>");
    printf("</head>");
    printf("<body>");
    printf("<p>Hello World</p>");
    printf("</body>");
    printf("</html>");
    return;
}

--------------------------------------------------------------

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:

 

 

--------------------------------------------------

<Directory /var/www/cgi-bin>
Options ExecCGI
SetHandler cgi-script .cgi .py .pl .php
</Directory>

-------------------------------------------------

 

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.

NevemTeve Creative Commons License 2014.03.17 0 0 2629

Szerintem két eset lehetséges: vagy megfertőzted a géped valami trójai programmal, vagy csak kísérletet tettél rá.

Előzmény: bzsolt84 (2627)
NevemTeve Creative Commons License 2014.03.16 0 0 2628

Megnéztem a google-fordítóban, azt írja, hogy a 'cannot connect' jelentése: 'nem tud kapcsolódni'

Előzmény: bzsolt84 (2627)
bzsolt84 Creative Commons License 2014.03.16 0 0 2627

Sziasztok!

 

É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é?

 

A válaszokat előre is köszönöm!

 

xpkiller Creative Commons License 2013.09.12 0 0 2626

okulásképpen pedig PHP esetén, ez kell neki:

 

pcntl_signal(SIGTERM, 'sig_handler');
pcntl_signal(SIGINT, 'sig_handler');
pcntl_signal(SIGCHLD, 'sig_handler');

function sig_handler($sig) {
    switch($sig) {
        case SIGTERM:
        case SIGINT:
            exit();
            break;
        
        case SIGCHLD:
            pcntl_waitpid(-1, $status);
            break;
    }
}

ettől helyesen kezd működni...

 

Előzmény: xpkiller (2625)
xpkiller Creative Commons License 2013.09.12 0 0 2625

hát, újabb sok sörrel jövök..

Lassan törlesztenem kéne, mert egyszerre sok lesz ;)

 

Előzmény: NevemTeve (2624)
NevemTeve Creative Commons License 2013.09.12 0 0 2624

A child addig <defunct> marad, míg a szülő le nem kérdezi a státuszát. Pl egy SIGCHLD szignál hatására.

 

#!/usr/local/bin/perl

use strict;

$SIG{INT} = sub { die "$$ dying\n" };
$SIG{CHLD} = sub {
    my ($pid);
    $pid= wait();
    printf ("Child %d exited code %d\n", $pid, $?);
};

use IO::Socket::INET;
use Sys::Syslog;

# flush after every write
$| = 1;

my ($serv_port, $serv_ip);
my ($socket,$client_socket);
my ($peeraddress,$peerport);
my ($cli_sent, $data);

sub childproc;

$serv_port = '10001';
$serv_ip = '0.0.0.0';

$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_port\n";
# daemonize
    my ($ARGC);
    $ARGC= @ARGV;

    if ($ARGC>=1 && $ARGV[0] eq '-D') {
        my ($mpid);

        $mpid = fork();
        if ($mpid) {
            printf ("Parent exits child's pid is %d\n", $mpid);
            exit (0);
        } else {
            printf ("Child goes on pid=%d\n", $$);
        }
    } else {
        printf ("Non-batch mode (use option -D for batch mode)\n");
    }

    while(1) {
        my ($pid, $client_socket);

        while (($client_socket = $socket->accept())==0) {}
        printf ("accept returned non-zero: %d\n", $client_socket);

        $pid = fork();
        if (! $pid) {
            childproc ($client_socket);
        }
    }

sub childproc {
    my ($client_socket);

    $client_socket = $_[0];
    $peeraddress = $client_socket->peerhost();
    $peerport = $client_socket->peerport();
       
    print "Accepted New Client Connection From : $peeraddress, $peerport\n";

    # read operation on the newly accepted client
    while ($data = <$client_socket>) {
        print "Received from Client : $data\n";
        print "$cli_sent\n";
    }
    print "client disconnected\n";
    $client_socket->close();
    exit 0;
}

Előzmény: xpkiller (2623)
xpkiller Creative Commons License 2013.09.12 0 0 2623

Az eddigiekért is hálás köszönet!

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.

 

Előzmény: NevemTeve (2622)
NevemTeve Creative Commons License 2013.09.11 0 0 2622

Egyelőre ennyi időm volt a programodra, folyt köv.

Előzmény: xpkiller (2621)
xpkiller Creative Commons License 2013.09.11 0 0 2621

ok, megkeféltem.. akarom mondani megfésültem ;)

 

eredmény ua:

root     13100  0.0  0.0      0     0 pts/1    Z+   20:08   0:00 [tcp_server.pl] <defunct>

 

NevemTeve Creative Commons License 2013.09.11 0 0 2620

Kezdetnek fésüld meg egy kicsit:

 

#!/usr/local/bin/perl

use strict;

$SIG{INT} = sub { die "$$ dying\n" };

use IO::Socket::INET;
use Sys::Syslog;

# flush after every write
$| = 1;

my ($serv_port, $serv_ip);
my ($socket,$client_socket);
my ($peeraddress,$peerport);
my ($cli_sent, $data);

$serv_port = '10001';
$serv_ip = '0.0.0.0';

$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_port\n";

# daemonize
    my ($ARGC);
    $ARGC= @ARGV;

    if ($ARGC>=1 && $ARGV[0] eq '-D') {
        my ($mpid);

        $mpid = fork();
        if ($mpid) {
            printf ("Parent exits child's pid is %d\n", $mpid);
            exit (0);
        } else {
            printf ("Child goes on pid=%d\n", $$);
        }
    } else {
        printf ("Non-batch mode (use option -D for batch mode)\n");
    }

    while(1) {
        my ($pid, $client_socket);

        $client_socket = $socket->accept();
        unless ($pid = fork()) {
            $peeraddress = $client_socket->peerhost();
            $peerport = $client_socket->peerport();
           
            print "Accepted New Client Connection From : $peeraddress, $peerport\n";
           
            # read operation on the newly accepted client
            while ($data = <$client_socket>) {
                print "Received from Client : $data\n";
                print "$cli_sent\n";
            }
            print "client disconnected\n";
            $socket->close();
            exit 0;
        }
    }

xpkiller Creative Commons License 2013.09.10 0 0 2619

De nagy a csend...

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";

unless ($mpid = fork()) {
    # daemonize
    while(1) {
        $client_socket = $socket->accept();
        unless ($pid = fork()) {
            $peeraddress = $client_socket->peerhost();
            $peerport = $client_socket->peerport();
            
            print "Accepted New Client Connection From : $peeraddress, $peerportn";
            
            # read operation on the newly accepted client
            while ($data = <$client_socket>) {
                print "Received from Client : $datan";
                print "$cli_sentn";
            }
            print "client disconnectedn";
            $socket->close();
            exit 0;
        }
    }
}
# main proc after fork()

print "server startedn";

Mit rontok el az alapoknál???

 

xpkiller Creative Commons License 2013.03.21 0 0 2618

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.

A lock/unlock-ra meg használjak semaphore-t.

 

Előzmény: xpkiller (2617)
xpkiller Creative Commons License 2013.03.21 0 0 2617

NEM JÓÓÓ!!!

:(((

pse F1!!!

Ki hogyan használja a shared mem-et??

Példa technikákat mutatnátok? (gyakorlati, kipróbált.. a net-en sok mindent találtam, amiknek hol itt, hol ott van bajuk (vagy van bajom velük).

 

Előzmény: xpkiller (2616)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!