Fórumok
Kedves fórumtársak!
Nemrég találtam meg a nanoftpd nevű PHP-s projektet, amivel tökéletesen elégedett vagyok, egy hiányossága van csak: amikor nagy fájlokat töltök fel, a kontroll kapcsolat fél perc múlva időtúllépés miatt megszakad. Úgy vélem, ez a PHP egyszálúsága miatt van így.
A kérdésem az lenne, lenne-e valakinek ötlete arra vonatkozólag, hogyan lehetne ezt feloldani egyszerűen - ha egyáltalán lehetséges. Az jutott eszembe, hogy esetleg forkolni lehetne az adatfolyamot, de ezzel a technikával nincs még tapasztalatom.
A válaszokat előre is köszönöm.
Hozzászólások
megkérdezhetem, h miért akarod "megerőszakolni" a dolgokat?
mekkora adatmennyiséget akarsz feltölteni? miért éppen FTP-ben gondolkodsz?
tuti van valmi max run time beállítása a php nek és abba futsz bele.
De amúgy ez valami végtelen nagy tévedés: ftp démon php-ban! What? Inkább írd le, h mire akarod használni! Szerintem lesz a ftp-nél jobb javaslat!
"antiegalitarian, antiliberal, antidemocratic, and antipopular"
FTP-nél még az se kizárt, hogy az active/passive mód probléma kerül elő.
Kíváncsiságból megkérdeztem az eheti experimental Gemini modellt:
hogyan indítod az ftpd oldalt? cli? mit ír ki miután megszakad a kapcsolat? A forrást megnézve használ socket_select -et, így az, hogy egy szálon történnek a dolgok, nem befolyásol semmit ezzel kapcsolatban
// Happy debugging, suckers
#define true (rand() > 10)
Ez az ftpd nem kezel timeout-ot. Csak "===false" jellegű hibakezelés van a socketekre. A timeout értéke valami default ill. a php config-ból adódik.
A max_conn ill. max_conn_per_ip túllépése esetén "421 <hibaüzenet>" választ ad, majd megszakítja a kapcsolatot.
Szerintem neked a felhasználói élménnyel van gondod, azaz hogy az általad használt kliens nem kapcsolódik újra, ha megszakadt a kapcsolat. Vagy próbál, de előbbi két korlátozás valamelyikébe ütközik.
Köszönöm a válaszokat, a következő a helyzet: van egy feladatkezelő rendszerem, amit PHP-ban írtam, és az ide feltöltött fájlokat (feladatokhoz és a tárhelyre) szeretném FTP-n is elérhetővé tenni. Az FTP számomra egy tökéletes protokoll, régi, szabványos, titkosított kapcsolaton keresztül folyhat a kommunikáció, valamint végtelenféle klienst írtak már hozzá mindenféle operációs rendszerhez.
Amikor WinSCP-vel csatlakozom hozzá, az úgy van beállítva, hogy a fájlok felmásolásához a háttérben indítson külön kapcsolatot. Amikor elkezdem a nagy fájlt felmásolni, az eredeti kapcsolat (kontroll) "lefagy", nem lehet rajta frissítést nyomni, a könyvtárak között közlekedni, bármi mást csinálni. Ráadásul ez szakad meg fél perc múlva, az adatkapcsolaton a fájl közben felmegy.
Találtam node.js csomagokat a témában, ezek végülis működnek, de jobban szeretném PHP-val megoldani, amennyiben lehetséges.
FTP-nél hogy oldod meg h. titkosítson? Mert én még titkosított ftp átvitelt nem láttam, de lehet én vagyok lemaradva. Az sftp az meg ugye igazából SSH.
Tudomásom szerint az ftps az annyit tudott évekkel ezelőtt is h. a hitelesítés titkosított volt, minden más ugyanúgy plain. Aztán most lehet valaki megcáfol.
FTPS esetében választhatsz, az explicit titkosításnál titkosítatlanul kezdődik a kapcsolat (alapértelmezetten a 21-es port), ahol felkínál egy AUTH TLS nevű parancsot, ha ezzel folytatod, akkor a kapcsolat utána titkosított csatornára vált. Implicit titkosítás esetén (általában a 990-es porton fut) eleve TLS kézrázással indul, és utána titkosított lesz az adatcsere.
FTP szoftver és beállítás függvénye, hogy kötelező-e a titkosítás vagy sem.
Jó kérdés, hogy ha a parancscsatorna titkosítva megy, akkor a tűzfal miből fogja tudni, hogy az adatcsatornát mely porton kell megengedni.
Ez tényleg jó felvetés. Nyilván meg tudom adni, hogy a rendszerem milyen tartományban nyitna passzív adatkapcsolatot, de ha ezt nem tudják megoldani a másik oldalon a tűzfalban, akkor marad az aktív kapcsolat.
van ennek bármi előnye a https -el szemben? mert én csak hátrányát látok...
Nem tudom, hogy számodra mi az előny és mi a hátrány, ezért csak a magam véleményét tudom leírni, amivel vagy egyetértesz vagy nem.
Az FTP egy viszonylag egyszerű protokoll, ami nagyjából változatlan évtizedek óta. Ez szerintem óriási előny, ha a https alatt egy böngésző alapú szolgáltatást értesz, akkor ott az adott szolgáltatás publikus API-ját (URL) jellemzően párévente lecserélik (jön egy újabb divat, újabb frontend), így a klienseket is módosítani kell.
Az FTP arra lett kitalálva, hogy fájlokat juttassanak el egyik helyről a másikra. A http protokoll ennél egy picit általánosabb, emiatt érdekes az előbbi bekezdésem, hogy változhat az API és a kliensek.
Természetesen készítettem webes és webdav klienst is, de ezekhez képest az FTP-nek még előnye, hogy nagyon egyszerűen scriptelhető, azaz könnyen megoldható bizonyos fájlok automatizált másolása a rendszerbe.
több dolgot nem értek:
1) ahol elfut egy (apache?) webserver ott elfut egy ftpd is - kár ezért még a PHP-t is bevonni
2) mint azt irták, az FTP nemigen tud titkosítani
3) ha a kliens NAT mögött van, akkor vagy passive mód kell vagy NAT helper (emlékeim szerint)
4) http átvitelben mi az, ami nem scriptelhető? egy olyan egyszerű eszközben mint egy Mikrotik router is van már tool/fetch - ami még upload-ot is tud
Semmiképp nem jó PHP ban írt ftp szervert használni. Szerintem aki ezt készítette, csak ilyen hobbiból csinálta, h meg tudja-e oldani PHP-ben a feladatot és nem produkciós környezetre szánta. Most épp egy ilyen problémába futottál bele, holnap meg másmilyenbe fogsz. Ha mindenképp FTP-t akarsz használni, akkor olyan ftp szervert kell keresned ami már bevált! Az autentikációt kell összehoznod a feladatkezelőddel! Célszerű olyan ftp-t keresni ami tud sql-ből autentikálni és akkor adatbázis szinten megoldani az egyeztetést!
"antiegalitarian, antiliberal, antidemocratic, and antipopular"
SFTP-t használnak mindenhol.
Nem elérhető azon a szerveren? Nincs SSH?
Bármi jobb egy megerőszakolt PHP-nál. :)