remote copy script werkt niet meer
hallo,
ik gebruik het volgende script
en roep het aan met
ik heb het geheel nu overgeplaatst naar een andere server en nu werkt het niet meer. met error_reporting(E_ALL); krijg ik geen fouten te zien maar de site stopt gewoon.
waar kan dit aan gelegen hebben?
alvast bedankt, jesper
ik gebruik het volgende script
Code (php)
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
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
<?php
function retrieve($remote_filename, $home_filename, $autocomplete = true)
{
$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.0\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 retrieve($remote_filename, $home_filename, $autocomplete = true)
{
$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.0\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;
}
?>
en roep het aan met
Code (php)
1
2
3
4
5
6
2
3
4
5
6
require('afbeelding.php');
if($file = retrieve($plaatje, './')){
echo '<img src="'.$file.'"/>';
}else{
echo 'error';
}
if($file = retrieve($plaatje, './')){
echo '<img src="'.$file.'"/>';
}else{
echo 'error';
}
ik heb het geheel nu overgeplaatst naar een andere server en nu werkt het niet meer. met error_reporting(E_ALL); krijg ik geen fouten te zien maar de site stopt gewoon.
waar kan dit aan gelegen hebben?
alvast bedankt, jesper
*lekker bumpen*
Dan gaat er blijkbaar toch iets fout. Controleer eens of de display_errors instelling in je php.ini wel aan staat. Dat is namelijk vrij essentieel als je fouten wilt zien...
Notice: Undefined variable: errno in /home/vol4/byethost.nl/byet_1506309/dvdtjes12.byethost.nl/
htdocs/site/afbeelding.php on line 26
de bovenste is 26
dit script is niet van mij maar verder word nergens $erno gebruikt.
htdocs/site/afbeelding.php on line 26
de bovenste is 26
Code (php)
1
2
2
if(!$handle = fsockopen($url[0], 80, $errno, $errstr, 30)) {
trigger_error("$errstr ($errno)", E_USER_ERROR);
trigger_error("$errstr ($errno)", E_USER_ERROR);
dit script is niet van mij maar verder word nergens $erno gebruikt.
Gewijzigd op 01/01/1970 01:00:00 door nvt nvt
Dat is dus ook de fout.
$errno bestaat niet! Overigens zou ik niet de enkele '=' operator gebruiken. Als je wil vergelijken gebruik dan de dubbele '='.
Desalniettemin is de plaats waar $errno in de functie staat leeglaatbaar. Ik zou even voordat je met de if begint $errno = ''; plaatsen. Aangezien ik vrees dat hij hierna voor $errstr een error teruggeeft, zou ik die ook even d'rvoor plaatsen (of wordt hij wel gebruikt?).
$errno bestaat niet! Overigens zou ik niet de enkele '=' operator gebruiken. Als je wil vergelijken gebruik dan de dubbele '='.
Desalniettemin is de plaats waar $errno in de functie staat leeglaatbaar. Ik zou even voordat je met de if begint $errno = ''; plaatsen. Aangezien ik vrees dat hij hierna voor $errstr een error teruggeeft, zou ik die ook even d'rvoor plaatsen (of wordt hij wel gebruikt?).
Dat is helaas niet het probleem, aangezien het hoogstens een notice is. Het is netter ze ergens vooraf te definiëren, maar niet noodzakelijk. Die enkele = klopt ook. Als fsockopen false teruggeeft, geeft $handle false terug, wordt de voorwaarde dus true. Mag gewoon.
Maar je zegt dat hij blijft hangen, het script. Dat klinkt als een timeout op een blocking functie. Zou je rondom alle fsockopen, fwrite, fopen, fclose en fgets eens echo's plaatsen zodat je kan zien tot waar hij werkt, en waar hij ermee kapt?
Maar je zegt dat hij blijft hangen, het script. Dat klinkt als een timeout op een blocking functie. Zou je rondom alle fsockopen, fwrite, fopen, fclose en fgets eens echo's plaatsen zodat je kan zien tot waar hij werkt, en waar hij ermee kapt?
ik heb na veel proberen een andere, naar mij idee DE, fout code gevonden
Warning: fsockopen() has been disabled for security reasons in /home/vol4/byethost.nl/byet_1506309/dvdtjes12.byethost.nl
/htdocs/site/afbeelding.php on line 27
hoe zet ik het weer aan?
Warning: fsockopen() has been disabled for security reasons in /home/vol4/byethost.nl/byet_1506309/dvdtjes12.byethost.nl
/htdocs/site/afbeelding.php on line 27
hoe zet ik het weer aan?
Gewijzigd op 01/01/1970 01:00:00 door nvt nvt
deze is door je host uitgeschakeld, ik zou hun een mailtje sturen om het weer aan te zetten..
dan gaan we dat proberen
Wanneer fsockopen() is geblokkeerd, kun je toch met cURL aan de slag? Het staat mij bij dat die veiliger is en juist daarom wordt geinstalleerd en gebruikt.
Ps. Heb er nooit mee gewerkt...
Ps. Heb er nooit mee gewerkt...




