Remote Copy

Door Jelmer -, 17 jaar geleden, 2.802x bekeken

Even een functie voor als je een bestand van een andere server naar je eigen wilt kopiƫren.
Hij is gemaakt voor plaatjes, maar andere bestanden zouden in principe ook moeten kunnen.

Gebruik:

retrieve($remote_filename, $home_filename, $autocomplete)

$remote_filename:
URL naar het bestand op de andere server.

$home_filename:
Bestandsnaam, of map indien $autocomplete true is waar het bestand moet worden opgeslagen.

$autocomplete:
Als deze waarde true (standaard) is, wordt $home_filename de directory waar het bestand in wordt opgeslagen, en de bestandsnaam blijft hetzelfde als die van het bestand toen het nog op de server stond. Indien false, moet je in $home_filename de hele bestandsnaam invullen. (ook extensie)


Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if($filename = retrieve('http://www.w3.org/Icons/Logo_25wht.gif', './')){
    echo '<img src="'.$filename.'"/>';
}

?>


Changelog:

7 juli 2005:
'Memoryleak' eruit gevist. Hij slaat nu meteen op terwijl hij het bestand naar binnen trekt. Bij grote bestaden (groter dan 1MB) zou dit een heleboel werkgeheugen besparen, en een snelheidswinst moeten opleveren.

8 december 2007:
Request veranderd van HTTP/1.1 naar HTTP/1.0 aangezien het script niet om kan gaan met chunked antwoorden.


Documentatie

http://doc.ikhoefgeen.nl/?n=Scripts.RemoteCopy

Gesponsorde koppelingen

PHP script bestanden

  1. remote-copy

 

Er zijn 14 reacties op 'Remote copy'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Guido Veenstra
Guido Veenstra
17 jaar geleden
 
0 +1 -0 -1
leuk script!!!
Onbekend onbekend
onbekend onbekend
17 jaar geleden
 
0 +1 -0 -1
ja, kzal het es proberen...
Han eev
Han eev
17 jaar geleden
 
0 +1 -0 -1
Handig, maar je kan ook doel opslaan als doen :P
Maar als je het op een site wilt doen kan dit heeel goed.
Jelmer -
Jelmer -
17 jaar geleden
 
0 +1 -0 -1
Het was eigenlijk bedacht voor bijvoorbeeld remote avatars voor forum's en dergelijke. Dat als een gebruiker een url voor zijn avatar invult de bezoeker van het forum niet afhankelijk is van de berijkbaarheid van de andere (waar avatar orgineel staat) host. Soort van cache-achtig iets.
Bram Z
Bram Z
17 jaar geleden
 
0 +1 -0 -1
Daarvoor gebruik je toch gewoon copy
Jelmer -
Jelmer -
17 jaar geleden
 
0 +1 -0 -1
Als je server dat standaardfuncties verbinding maken met bestanden van buitenaf, ja.
Arjan
Arjan
17 jaar geleden
 
0 +1 -0 -1
Dit is echt beter, dank je!
Tom Beuckelaere
Tom Beuckelaere
17 jaar geleden
 
0 +1 -0 -1
Ik zou graag zo'n code hebben maar dan uitvoerbaar met een invoervak waar ik gewoon de url moet invoeren en op de knop kopieren of uploaden moet klikken en dat dan het bestand gekopieerd wordt. misschien ook met een systeem dat ik het upload/kopieer proces kan zien.

Zeer vriendelijk bedankt voor diegene die het voor mekaar krijgt want zo gevorderd ben ik nog niet (beginneling :()

dank je undersiege


16 jaar geleden
 
0 +1 -0 -1
Firefox 1.0.4 als User Agent :-/
Waarom niet 2.0 :p
Jelmer -
Jelmer -
16 jaar geleden
 
0 +1 -0 -1
Omdat die nog niet uit was in september 2005 ;-)
Nils Bokdam
Nils Bokdam
16 jaar geleden
 
0 +1 -0 -1
ik heb wat aan de code toegevoegd, zodat hij de bestanden ook opslaat in een database, en voor elk bestand een andere map aanmaakt. Dit is handig, omdat de map het id-nummer krijgt wat ik het bestand toewijs. Zo heb je nooit gekloot vanwege 2 bestanden die dezelfde naam hebben. Trouwens, ik verbind al met de mysql database in de config.php file, dat vind ik zelf makkelijker werken. Eigenlijk is dat natuurlijk niet helemaal netjes, maarja...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php

include("config.php");

function
retrieve($remote_filename, $home_filename, $autocomplete = true){

$sql = "INSERT INTO `extern` SET `herkomst`='$remote_filename'";
$query = mysql_query($sql);

$sql2 = "SELECT `id` FROM `extern` WHERE `herkomst`='$remote_filename' ORDER BY `id` Desc LIMIT 0,1";
$query2 = mysql_query($sql2);
  while($obj2=mysql_fetch_object($query2)){
$nieuwid = "$obj2->id";
}


    my_ftp_mkdir ('files/', $nieuwid);

$home_filename .= $nieuwid . "/";

    $awnser = '';
    $headers = array();
    $status = '';
    $headerstopped = false;
    $fileId = 0;
    $size = 0;
    
    $url = explode('/', $remote_filename);
    if($url[0] == 'http:' OR $url[0] == 'https'){
        $url = array_slice($url, 2);
    }

    if($autocomplete){
    $home_filename .= $url[count($url)-1];
    }

    
    if(!$filehandle = fopen($home_filename, 'w')){
        trigger_error('Could not create file', E_USER_ERROR);
        return false;
    }
else{
        if(!$handle = fsockopen($url[0], 80, $errno, $errstr, 30)) {
            trigger_error("$errstr ($errno)", E_USER_ERROR);
            fclose($filehandle);
            return false;
        }
else{
            $out = "GET /".implode('/', array_slice($url, 1))." HTTP/1.1\r\n";
            $out .= "Host: ".$url[0]."\r\n";
            $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.8) Gecko/20050511 Firefox/1.0.4\r\n";
            $out .= "Connection: Close\r\n\r\n";
            fwrite($handle, $out);
            while (!feof($handle)) {
                if(!$headerstopped){
                    $awnser .= fgets($handle, 8192);
                    if(stristr($awnser, "\r\n\r\n")){
                    list($header, $data) = explode("\r\n\r\n", $awnser);
                        $header = analizeHeader($header);
                        if(stristr($header['Status'], '200 OK')){
                            $headerstopped = true;
                            unset($awnser);
                        }
else{
                            if(stristr($header['Status'], '400')){
                                trigger_error('Bad request', E_USER_ERROR);
                            }

                            elseif(stristr($header['Status'], '404')){
                                trigger_error('File not found', E_USER_ERROR);
                            }

                            unset($awnser);
                            fclose($handle);
                            fclose($filehandle);
                            return false;
                        }
                    }
                }
else{
                    $buffer = fgets($handle, 8192);
                    fwrite($filehandle, $buffer);
                    $buffer = NULL;
                }
            }

            fclose($handle);
            fclose($filehandle);
            return $home_filename;
        }
    }
}
function
analizeHeader($header){
    $headers = array();
    foreach(explode("\r\n", $header) as $value){
        if(stristr($value, ': ')){
            list($key, $value) = explode(': ', $value);
            $headers[$key] = $value;
        }
else{
            $headers['Status'] = $value;
        }
    }

    return $headers;
}


function
my_ftp_mkdir ($path, $dir) {
    $server = "xxxxx"; // het adres van je ftp server
    $connection = ftp_connect ($server); // connect naar de ftp server

$path = "httpdocs/" . $path;
    
    // inloggen op de ftp server
    $user = "xxxxx";
    $pass = "xxxxx";
    $result = ftp_login ($connection, $user, $pass);
    
    if ((!$connection) || (!$result)) {
        return false;
        exit();
    }

    else {
        // ga naar de dir die als argument aan de functie is meegegeven
        @ftp_chdir ($connection, $path);
        
        // nu de map maken en de rechten goed zetten
        if (@ftp_mkdir($connection, $dir)) {
            $chmod_cmd = "CHMOD 0777 " . $dir;
            $chmod = ftp_site($connection, $chmod_cmd);
            $teruggave = "De map $dir is aangemaakt";
            return $dir;
        }

        else {
            return false;    
        }

    
        ftp_close($connection); // ftp verbinding verbreken
    }

return $teruggave;
};


?>
Wouter DS
Wouter DS
14 jaar geleden
 
0 +1 -0 -1
ik ga dit script is aanpassen gwn voor de lol :p dat je een form hebt en als je de link ingeeft het download naar de server en eenmaal klaar er een link op je scherm verschijnt en via die link kan je het dan weer van de server downloaden :p
Wouter DS
Wouter DS
14 jaar geleden
 
0 +1 -0 -1
Klaar :p :)
http://paradox-productions.net/DownloadToServer/
probeer maar!
werkt goed hoor!
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jan Mas
Jan Mas
14 jaar geleden
 
0 +1 -0 -1
Mooi Paradox,

Kan je het ook delen met ons?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. remote-copy

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.