Handbook of php tippeket, hogyan lehet fájlt küldeni a szerverre
Hogyan, hogy küldjön egy fájlt a szerverre
A fejlesztés során a projekt keletkezett a probléma küldésére a helyszínen „A” helyben „B” archív fájlt, amit aztán ki kell nyitni a „B” webhelyen. Sőt, a fájl az „A” dinamikusan generált az oldalon. és menj elérhető a PHP-script részvétele nélkül minden formában, stb
Azt megoldotta ezt a problémát kétféleképpen, és szeretnék megosztani veletek.
№1 Módszer: POST módszert küldeni a fájlt
Az elképzelés az, hogy az oldal „A” által alkotott POST-kereső, ami önmagában tartalmaz nevét és a fájl tartalmát átvinni kívánt, és elküldte a „B” oldal. Az oldalon a „B” POST-kérelem érkezik, és írt a megadott fájl tartalmát megadott.
Technológia POST-kérelem átadását a PHP-script, tettem foglalat.
Annak érdekében, hogy az adatok továbbítására postai kialakításához szükséges tartalmazó karakterlánc kérés fejlécet és az adatokat közvetlenül magukat.
Egy tipikus formája húrok, elküldi a szerver lehet:
Mint látható, a változók POST-kérés van beállítva, mint a GET-kérelmet, azaz var1 = val1var2 = ért2
Ezután nyissa foglalat segítségével fsockopen () függvényt. ahol paramétereket kap, hogy a domain nevet, amely a kérelmet, a port számát, egy változó, amely egy átviteli hiba számát (ha ilyen van), a változó tartalmazza a hiba leírását (ha van), és a záró az aljzatba, ha nincs használatban (másodpercben):
Adunk bizonyíték egy nyitott foglalat és olvassa el a válasz „B” szerver.
Ennek eredményeként a script a helyén „A” megy POST-keresés az oldalon „B”. nevezetesen import.php forgatókönyvet. „B” gyökerében található az oldalon. Ie import.php futtatni a szkriptet. ahol a script lesz elérhető array $ _POST. tartalmazó variábilis fájlnév és tartalmát.
Mindössze arra van szükség, hogy nyissa meg írásra nevű fájlt a $ _POST [ „fájlnév”]. és írja vissza az adatokat a változó $ _POST [ 'content'].
Mindent! Fájl vett és tárolt!
De van egy dolog: a másolt fájl bármilyen típusú lehet. És a bináris és szöveges. Mint látható, a fájl tartalma továbbítja a POST-kérelmet var1 = val1var2 = ért2. azaz ha <здесь содержимое файла file.zip> egy bináris, vagy URL-jelentéssel bíró karaktereket, akkor a integritását a továbbított fájl eltörhet, vagy a fájl nem kerül át egyáltalán!
Ennek elkerülése érdekében a fájl tartalmát, mielőtt elküldi azt kell átalakítani a URL-inaktív formában. Ez megtehető base64_encode () függvényt.
és egy változó $ file_content illeszteni POST-keresés:
Ebben az esetben a fájl tartalmát kerül át a „biztonságos” állapotban van.
Vétel és „dekódolás” a tartalmát egy fájlt a „B” site elvégezhető base64_decode () függvény.
Meg kell jegyezni, hogy ez a módszer jól működik a viszonylag kis fájlok (körülbelül 2 megabájt, megszerzésére pontosabb értéket kell nézni a maximális összeg PHP beállítások érkeztek adatok POST módszer).
Csak amikor szembesül a korlátozás a mérete feltöltött fájlokat a következő fájl átviteli módot.
№2 módszer: küld fájlokat PUT
Mint korábban említettük, a fájlok küldése egy távoli szerver segítségével a POST módszer segítségével aljzatok jó kis fájlméret. Vihetők át, akkor kell használni a átviteli módot PUT.
Ehhez használja a könyvtár göndör.
PUT módszer átvinni egy fájlt, akkor kell inicializálni CURL ülés, meg a munkamenet szükséges paramétereket, végrehajtja CURL kérelmet, és zárja be a munkamenetet.
A következő példa bemutatja az átadása „B” file.zip fájlszerver.
Futtatása után ez a script a helyén „A” helyben „B” megy a PUT kérés, amely látni a tartalmát a továbbított fájlt, és a GET-kérés tartalmazza a fájl nevét kell továbbítani.
Következő, meg kell szervezni a fájlátvitel site „B”.
Ebből a célból a forgatókönyvet import.php. „B” a honlapon. A $ _GET tömb, meg kell, hogy a fájl nevét, és a bemeneti áram - Fájl tartalma:
Ebben az eljárásban lehetőség van továbbítja nagy mennyiségű fájlt.
Meg kell említeni, hogy valószínűleg két fájlátvitel a fenti eljárás nem az egyetlen lehetséges út. Például, akkor át fájlokat a PHP-szkriptek távoli FTP-szerver protokoll (azonos PHP CRL vagy speciális funkciók, mint például ftp_connect (), ftp_login (), ftp_put (), stb). De hozzáférést az FTP nehéz lehet (nem ismert felhasználónevét és jelszavát, vagy azok már változott a szerveren, de nem változott a scriptek, stb.) Egy út itt adja fog működni minden típusú web hosting (az esetleges különbséggel, hogy néhány szabad tárhely, ami tilos az adatokat az egyéb helyeken).