Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Копирование содержимого PHP файла
 
 автор: tima2010   (23.06.2011 в 13:44)   письмо автору
 
 

Привет!
Появилась задача скопировать содержимое одного php файла в содержимое другого php файла

В файле из которого нужно скопировать информацию содержиться примерно такой код:
<?php timafunction();?>
<div>test</div>
<?php function2();?>


Пишу код для копирования содержимого из одного файла в другой:
<?php 
copy
($phpfile1$phpfile2);
?>


в итоге копирует только ошибку вида:
<br />
<b>Fatal error</b>:  Call to undefined function timafunction() in <b>путь до файла из которого копируем/file.php</b> on line <b>1</b><br />


как я понял он при открытии файла не может найти функцию timafunction() и выдает ошибку которую затем переносит в новый файл...

Как это исправить? неужели php коды нельзя копировать ?

  Ответить  
 
 автор: Valick   (23.06.2011 в 13:49)   письмо автору
 
   для: tima2010   (23.06.2011 в 13:44)
 

лучше расскажите почему возникла такая задача?
может быть достаточно обычного include()?
Как это исправить? неужели php коды нельзя копировать ?
РНР код - это обычный текст, конечно же можно копировать все что угодно, нужно только знать зачем, чтобы выбрать правильное решение.

  Ответить  
 
 автор: tima2010   (23.06.2011 в 13:59)   письмо автору
 
   для: Valick   (23.06.2011 в 13:49)
 

Исходный файл содержит код используемый в других файлах которые еще не созданы, они создаются по мере надобности
для удобства лучше написать такой скрипт, чем каждый раз заходить по FTP

  Ответить  
 
 автор: Valick   (23.06.2011 в 14:04)   письмо автору
 
   для: tima2010   (23.06.2011 в 13:59)
 

тогда include()

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:06)   письмо автору
 
   для: Valick   (23.06.2011 в 14:04)
 

забыл добавить, новые файлы куда мы копируем код, еще и редактируются, тоесть каждый новый файл создает копию основного + вносятся корректировки пользователем, include не поможет, задача скопировать содержимое

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:11)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:06)
 

Копируемые файлы и путь куда они копируются расположены на одном и том же сервере?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:19)   письмо автору
 
   для: cheops   (23.06.2011 в 14:11)
 

Да на одном и том же

  Ответить  
 
 автор: Valick   (23.06.2011 в 14:11)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:06)
 

какой тогда вообще в этом смысл? редактируете по ftp или http и что заменить один символ, что заменить абсолютно весь код без разницы.
кроме copy() есть еще и fopen() может он Вам лучше подойдет, хотя если честно я не понимаю смысла в Ваших действиях.

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:02)   письмо автору
 
   для: tima2010   (23.06.2011 в 13:44)
 

Вы вероятно (поправьте, если ошибаюсь), при копировании указываете сетевой путь http:// и у вас копируется не содержимое файла, а HTML-результат. Используйте относительный или абсолютный путь.

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:03)   письмо автору
 
   для: cheops   (23.06.2011 в 14:02)
 

Спасибо за отклик, нет я использую локальный путь
<?php $patch $_SERVER['DOCUMENT_ROOT']."/files/"?>

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:06)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:03)
 

Сообщение об ошибке может получиться только если содержимое файла пройдет через интерпретатор, copy() этого не делает (т.е. либо сразу HTML-код копируется, либо копирование PHP-кода прошло успешно, но неправильно определяется содержимое файла). Содержимое файла просматриваете через FTP? Если не сложно, опишите подбробнее как получено это сообщение об ошибке?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:10)   письмо автору
 
   для: cheops   (23.06.2011 в 14:06)
 

При обращении отдельно к этому файлу через http ошибку видно, т.к. этот файл является частью шаблона, в нем содержится код не всей "картины" поэтому и выходят ошибки

Я тоже не понимаю почему если путь указан локально и copy() просто копирует, все равно выходит ошибка...

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:16)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:10)
 

Возникновение ошибки не является загадкой, функция timafunction() не стандартна и файл может использоваться только в других скриптах, где эта функция определена. Вопрос лишь в том, что внутри файла? HTML-код с сообщением об ошибке или исходный PHP-код?
1) Если вы просматриваете полученный результат через HTTP - это может лишь говорить о том, что вы не все файлы загрузили, которые требуются для работы этого приложения.
2) Если это сообщение об ошибке видно прямо в PHP-файле (загруженном через FTP и просматриваемом в текстовом редакторе) это говорит о сбое загрузки - т.е. либо происходит копирование с участием сетевого адреса, либо копирование идет с одной машины на другую.

Давайте для начала определим с какой из этих двух проблем мы имеем дело? Потому что порядок решения для этих двух случаев разный.

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:09)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:03)
 

Правильно ли я понимаю, что так формируется путь для $phpfile1?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:14)   письмо автору
 
   для: cheops   (23.06.2011 в 14:09)
 

Полный код:

<form method="POST" action="#" name="page">
<input type="text" name="file_name" size="20"><br>
<input type="submit" value="Создать" name="page">
</form>

<?php 
if (isset($_POST['page'])==true
{
$patch $_SERVER['DOCUMENT_ROOT']."/files/"
$phpfile1 $patch."file.php";
$phpfile2 $patch."file-".$_POST['file_name'].".php";

copy($phpfile1$phpfile2);

}
?>

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:19)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:14)
 

Как я понял (поправьте, если ошибаюсь), файл file.php предназначен для вызова в другом файле при помощи include или сходной конструкции? Новый файл вызывается там же или для него тоже предусмотрен специальный отдельный файл? Это я к тому, что где определена функция timafunction() и имеет ли новый файл к ней доступ?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:23)   письмо автору
 
   для: cheops   (23.06.2011 в 14:19)
 

file.php вызывается как часть шаблона для index (поэтому в нем есть неопределенные функции, которые определяются только после объединения всех частей шаблона)
задача просто сделать копию этого файла но с заданным именем через форму

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:23)   письмо автору
 
   для: cheops   (23.06.2011 в 14:19)
 

file.php вызывается как часть шаблона для index (поэтому в нем есть неопределенные функции, которые определяются только после объединения всех частей шаблона)
задача просто сделать копию этого файла но с заданным именем через форму

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:27)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:23)
 

А эту новую копию вы как вызываете? Изменяете file.php на новое имя в index.php? Т.е. понятно, что если вызывать новое имя файла в браузере - будет получено сообщение об ошибке, но как я понял, это сообщение возникает и при попытке штатного использования нового файла? Если да, то какова эта попытка? Вы создаете копию для index.php, редактируете оригинальный index.php? Т.е. при каких обстоятельствах получено сообщение об ошибке?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:30)   письмо автору
 
   для: cheops   (23.06.2011 в 14:27)
 

что есть файл file.php - это часть шаблона которая отвечает за отображение страницы
у меня есть возможность задавать каждой странице свой шаблон но для этого нужно создавать файл с именем типа file-test.php
чтобы каждый раз не ходить по FTP и не создавать файлы вручную, решил сделать такой код который через админку позволяет создавать новый дизайн страниц (которые содержат исходный файл основного file.php + у меня есть возможность через админку редактировать новый созданный шаблон чтобы внести изменения которые мне нужны)

теперь в админке есть возможность для нужных мне страниц выбрать шаблон с именем file-test

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:35)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:30)
 

Где-то не подключается определение функции timafunction(), чтобы посоветовать что-то конретное, нужно больше подробностей. Скорее всего файл у вас копируется copy() успешно (в любом случае это можно проверить, загрузив его через FTP). Нужно найти определение timafunction() и проследить механизм подключения файл с этим определением и почему он не поключается на странице с шаблоном file-test.

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:38)   письмо автору
 
   для: cheops   (23.06.2011 в 14:35)
 

Видимо вы меня не правильно поняли...
Сам скрипт прекрасно работает, но почему то заместо содержимого file.php в новом файле file-test.php у меня записывается информация:


<br /> 
<b>Fatal error</b>:  Call to undefined function timafunction() in <b>путь до файла из которого копируем/file.php</b> on line <b>1</b><br />

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:42)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:38)
 

Либо происходит копирование с участием сетевого адреса, либо копирование идет с одной машины на другую. Других вариантов нет.

>Сам скрипт прекрасно работает, но почему то заместо содержимого file.php в новом файле file-
>test.php у меня записывается информация:
Правильно ли я понимаю, что смотрели содержимое файла file-test.php через текстовый редактор (предварительно загрузив его через FTP, если действие происходит не локально, а на удаленном сервере)?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:44)   письмо автору
 
   для: cheops   (23.06.2011 в 14:42)
 

Тестировал на XAMPP и тестировал на удаленном сервере у хостера
При просмотре через блокнот файла flie-text.php вижу не копию кода из копируемого файла
а вижу только ошибку написанную выше

  Ответить  
 
 автор: cheops   (23.06.2011 в 14:47)   письмо автору
 
   для: tima2010   (23.06.2011 в 14:44)
 

Прямо перед функцией copy() выведите содержимое переменных $phpfile1 и $phpfile2 - никаких аномалий нет (может как-то все-таки просачивается http://)?

  Ответить  
 
 автор: tima2010   (23.06.2011 в 14:53)   письмо автору
 
   для: cheops   (23.06.2011 в 14:47)
 

Я приношу свои глубочайшие извинения! Действительно у файла file.php был прописан не правильный путь

Большое спасибо cheops за разбор столь глупой ситуации

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования