Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou tentando salvar o arquivo file.txt que está em um servidor esterno no meu servidor. com o script abaixo.
Usando fsockopen()
<?
$url="http://localhost/file.txt";// url do servidor remoto
$fileName = "file.txt"; // nome do arquivo a ser salvo no diretorio padrao
$partialContent = false;
$finalFileSize = 0;
$urlParts = parse_url($url);
$socketHandler = fsockopen($urlParts["host"], 80, $errno, $errstr, 30);
// até aki está tudo ok.
if (!$socketHandler) {
exit;
} else {
$from = 0;
if (file_exists($fileName)) {
$from = filesize($fileName);
}
$out = "GET " . $urlParts["path"] . " HTTP/1.1/r/n";
$out .= "Host: " . $urlParts["host"] . "/r/n";
$out .= "Range: bytes=" . $from . "-rn";
$out .= "Connection: Close/r/n";
$headerFound = false;
if (!$fileHandler = fopen($fileName, "a")) {
exit;
}
fwrite($socketHandler, $out);
while (!feof($socketHandler)) {
if ($headerFound) {
if ($partialContent) {
$result = fread($socketHandler, 8192);
if (fwrite($fileHandler, $result) === false) {
exit;
}
} else {
fclose($fileHandler);
fclose($socketHandler);
exit;
}
} else {
$result = fgets($socketHandler, 8192);
$result = trim($result);
if ($result === "") {
$headerFound = true;
}
if (strstr($result, "206 Partial Content")) {
$partialContent = true;
}
if (preg_match("/^Content-Range: bytes (d+)-(d+)/(d+)$/", $result, $matches)) {
$finalFileSize = intval($matches[3]);
}
}
}
fclose($fileHandler);
fclose($socketHandler);
clearstatcache();
if (filesize($fileName) == $finalFileSize) {
// success
} else {
exit;
}
}
Mas nao esta salvando o arquivo .
O que pode estar errado ?
Muitas coisas.
1 - O endereço localhost está acessível somente do seu próprio PC. Do servidor obviamente não vai funcionar, ao menos que você utilize um endereço externo.
2 - Você precisa ter permissão de escrita no diretório corrente para poder salvar arquivos.
...
Existem outras formas de se fazer isso, e uma delas é com a função wget do Linux, caso você utilize (uma distro Linux em seu servidor).
Por ser um arquivo .txt, é mais fácil ainda. Você pode utilizar funções para visualizar o texto do arquivo, e gravar em um arquivo novo, usando funções como file(), file_get_contents(), e outras. Fsockopen não acho muito efetivo nessa situação específica.
Até mais.