Olen tutkinut voisiko tiedostoja siirtää palvelimelta toiselle php:lla.
Toinen vaihtoehto siis on se että siirretään tiedostot manuaalisesti FTP ohjelmalla.
Curl yhteydellä saan tarvittavien tiedostojen polut ja siten sisällönkin selville. Mutta Curl yhteys ei hitautensa vuoksi sovellu tiedostojen siirtoon...
Kyllä, siirto on erittäin yksinkertaista.
Jos riittää tiedostojen lataaminen toiselta palvelimelta, ei tarvita kuin file_get_contents sille puolelle, joka lataa tiedoston, ja tilanteen mukaan salasanan tarkistava skripti toiselle puolelle.
Jos tiedostoja täytyy pystyä lähettämään, tarvitaan vastaanottavalle puolelle skripti, joka tallentaa tiedoston, ja lähettävälle puolelle skripti, joka lähettää tiedoston esimerkiksi POST-metodilla. Tietoturvan parantamiseksi kannattaa laittaa data sopivaan muotoon ja käyttää salasanaa.
Lähetys:
<?php $password = 'NPmocfCRP2t8WJx0ifEz5NM5Ldi/XCiVrOKIAcPuR47Ij'; $filename = 'testaus.txt'; $filemode = @fileperms($filename) & 0777; $filedata = @file_get_contents($filename); if ($filedata === false) { http_response_code(404); die('File not found!'); } $data = serialize([$filename, $filemode, $filedata]); $hmac = hash_hmac('sha256', $data, $password); $context = stream_context_create(['http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/octet-stream', 'content' => serialize([$data, $hmac]), ]]); file_get_contents('http://target/save.php', false, $context);
Vastaanotto:
<?php $password = 'NPmocfCRP2t8WJx0ifEz5NM5Ldi/XCiVrOKIAcPuR47Ij'; list($data, $hmac) = unserialize(file_get_contents('php://input')); if ($hmac !== hash_hmac('sha256', $data, $password)) { http_response_code(403); die('Error!'); } list($filename, $filemode, $filedata) = unserialize($data); @chmod($filename, 0600); file_put_contents($filename, $filedata); chmod($filename, $filemode);
Kiitos paljon, alan heti kohta testaamaan.
Minä tuossa eka testissäni käytin bin2hex funktiota. Olisi tietysti hyvä jos voisi hakea tiedostot zip-paketteina ja purkaisi sitten oikeisiin hakemistoihin. Säästää hiukan tuota palvelimien välistä "kaistaa"..
En vaan ole tutustunut noihin zip funktioiden käyttöön mitenkään.
Sain toimimaan tämän hyvin. Arvelin ihan alakanttiin tuon Curl-yhteyden nopeuden. 6 megan zip paketin noutoon ja purkamiseen menee aikaa minun koneella vähän yli 20 sekuntia. Testasin vasta ohjelmaa erään kreikkalaisen kumppanin sivustolla, siellä se vei aikaa 40 sekuntia.
Salaukseen käytin mcrypt funktioita. Sekin koodi on Metabolixin tekemä, muistaakseni noin 8 vuoden takaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.