Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tiedostojen siirto palvelimelta toiselle

pistemies [05.11.2015 13:23:02]

#

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

Metabolix [05.11.2015 17:54:39]

#

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

pistemies [06.11.2015 14:48:29]

#

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.

pistemies [10.11.2015 16:57:28]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta