2012-01-27 6 views
-1

Я хочу скопировать файл с удаленного сервера на локальный сервер через php. Я не уверен в «лучшем» подходе, чтобы сделать это, поэтому я пробовал несколько разных способов добиться этого, но я ударяю блокпосты с этими методами.file_put_contents с амперсандом «&»

Итак, я придумал метод с использованием JSONP для (A) вызова удаленного сервера и получения содержимого файла .php и передать его на локальный сервер для локального скрипта, чтобы затем (B) вызвать локальный скрипт php и использовать file_put_contents для записи содержимого на локальный сервер.

Все работы прекращаются, пока не достигнут амперсанд. Запись файла останавливается.


Редактировать, чтобы показать данные, возвращающиеся назад.

if ($mysqlErrorConnectServer || $mysqlErrorConnectDb || $mysqlErrorConfigTableMissing) { 
    $errorMsg .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' 
        . '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' 
        . '<head>' 
        . '<title>Example website &copy; - Example description of example site</title>' 
        . '<style type="text/css">' 

Так что, если вы посмотрите на код, возвращающийся ... есть «& копия», которая должна быть там, чтобы отобразить символ авторского права на странице ... но останавливает file_put_contents от написания остальной файл.

+2

Возможно, покажите нам какой-то код .. – cambraca

+0

, потому что код, который у меня есть, - это беспорядок от попыток разных вещей. Вызывает больше путаницы, чем что-либо. –

+0

Затем сначала исправьте свой код, мы здесь не для того, чтобы убирать ваш беспорядок, широко гадая. – hakre

ответ

0

Скопировано из предыдущего ответа, чтобы ответить на мой вопрос.

Вот ответ на эту проблему. :) Знаю, это было бы что-то простое, с которым я еще не сталкивался. Прежде чем отправлять данные на локальный сценарий записи (после получения его обратно с удаленного), я просто вызываю encodeURIComponent() в мой возвращенный ответ и отправляю его на локальный скрипт для записи.

Работает как очарование.

3

Похоже, вам нужно будет закодировать файл на удаленном сервере с помощью htmlspecialchars() и декодировать его при получении его на локальном конце с помощью htmlspecialchars_decode().

Лучшей альтернативой может быть base64_encode() файл на удаленном сервере, и bas64_decode() он находится на локальном принимающем сервере.

+0

Это не передача данных, это проблема ... это фактическая запись, когда я получаю эти данные с удаленного сервера. Возвращаемые данные PERFECT ... затем я перехожу, чтобы записать эти данные в свою локальную копию, но когда достигнут амперсанд ... он перестает писать file_put_contents. Часть возвращаемых данных сценария включает в себя html-код для авторских прав и когда это и в «©» достигнут ... он перестает писать. –

+0

@ Lostinthesauce Вероятно, вы должны просмотреть источник в шестнадцатеричном редакторе или что-то искать непечатаемый символ, который мог бы отключить запись файла:/ –

+0

file_put_contents ('testing.php', ' '); Хорошо .. Я протестировал это, а не возвращал содержимое ... и это фактически записывается в файл. Я весьма озадачен. –

0

Почему бы просто не использовать PHP для этого?

<?php 
$file_contents = file_get_contents('http://www.google.com/'); 
$handle  = fopen('new-file.html', 'w'); 
frwite($handle, $file_contents, strlen($file_contents)); 
fclose($handle); 
?> 

Docs для file_get_contents(): http://php.net/file_get_contents

, как вы делаете это с помощью AJAX является другой передачи данных, вы должны получить его по обе стороны пролива из PHP, если вы можете. У вашего сервера будет известное хорошее интернет-соединение, однако у пользователя может быть плохое подключение к Интернету, и вы просите пользователя загрузить и загрузить информацию.

+0

Php не может проверить сервер REMOTE на сервере LOCAL и посмотреть, совпадают ли эти два сценария или не находят ли они, t. Насколько мне известно, единственный способ сделать это - вызвать JSONP-вызов на сервер REMOTE (передача хэша локального файла в процессе) и проверку REMOTE-хэша на ЛОКАЛЬНЫЙ хеш. Если они не совпадают ... передайте мне содержимое файла REMOTE, чтобы затем записать содержимое в файл LOCAL. –

+0

PHP может получить содержимое удаленных документов, первый пример в документации PHP для 'file_get_contents()' - как получить «источник домашней страницы сайта» (он использует протокол http: // '): http://php.net/file_get_contents. Я не хочу здесь спорить, мне просто интересно, какое поведение демонстрирует 'file_get_contents()', которое не делает то, что вы хотите. Я считаю, что он дает результат после того, как удаленный сервер разобрал его серверный код, вы хотите, чтобы фактический код PHP с удаленного сервера? – Jasper

+0

Я не понимаю, что вы спорите ... Я ценю ЛЮБОЙ вклад, поскольку это все меня несколько сбивает с толку. Я не пытаюсь получить «конечный результат» страницы ... Я пытаюсь получить «точное кодирование» самого файла .php. Способ достижения этого: (1) Узнайте сначала, если файлы разные (2) получить содержимое удаленного файла (3) записать содержимое в локальный файл. Поскольку удаленный файл использует методы, чтобы обеспечить его только локальный сервер .. Мне нужно вызвать скрипт на этом сервере, чтобы получить информацию и т. Д., А затем отправить его мне. –

Смежные вопросы