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

Форум PHP

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

 

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

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

тема: Открыть файл, прочитать его содержимое и скопировать в папку
 
 автор: pautina   (05.01.2012 в 12:33)   письмо автору
 
 

Здравствуйте Уважаемое сообщество.
Как на php реализовать следующее
- нужно открыть определённый файл
- прочитать его содаржимое
- скопировать этот файл в определённую папку (путь например image/lessons/les1677)
файлы которые нужно открыть будут хранится например в текстовом файле img.txt
http://www.photoshop-master.ru/lessons/les1677/1.jpg
http://www.photoshop-master.ru/lessons/les1677/2.jpg
http://www.photoshop-master.ru/lessons/les1677/3.jpg
...
http://www.photoshop-master.ru/lessons/les1677/20.jpg

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 13:24)   письмо автору
 
   для: pautina   (05.01.2012 в 12:33)
 

возможно подойдёт такой вариант

<?php 
$data 
file_get_contents("img.txt");
$a explode("\r\n",$data);
foreach(
$a as $b){
 
// это только вывод линков, но можно в цикле скопировать в нужную директорию через copy()
 
echo $b."<br />";
}

  Ответить  
 
 автор: pautina   (05.01.2012 в 13:32)   письмо автору
 
   для: Slo_Nik   (05.01.2012 в 13:24)
 

Как скопировать в нужную директорию через copy()

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 13:40)   письмо автору
 
   для: pautina   (05.01.2012 в 13:32)
 

copy()
один параметр для этой функции у Вас уже есть - $b;
сформируйте второй параметр и копируйте

  Ответить  
 
 автор: Valick   (05.01.2012 в 13:31)   письмо автору
 
   для: pautina   (05.01.2012 в 12:33)
 

а какого результата вы хотите достичь чтением этого файла?

  Ответить  
 
 автор: pautina   (05.01.2012 в 13:35)   письмо автору
 
   для: Valick   (05.01.2012 в 13:31)
 

Вообще я с файлами ещё не работал, имея адреса рабочих ссылок (если в них зайти, то видим рисунок) мне нужно эти рисунки скопировать в определённую папку image/lessons/les1677 например (может для этого и не нужно читать его содержимое)
Как в цикле скопировать в нужную директорию через copy()

  Ответить  
 
 автор: Valick   (05.01.2012 в 13:37)   письмо автору
 
   для: pautina   (05.01.2012 в 13:35)
 

<?php 
$data 
file_get_contents("http://www.photoshop-master.ru/lessons/les1677/1.jpg");
file_put_contents("vuala.jpg",$data);
?>

  Ответить  
 
 автор: pautina   (05.01.2012 в 13:40)   письмо автору
 
   для: Valick   (05.01.2012 в 13:37)
 

Это весь участок кода 2 строчками только делается что ли.
Цикл какой нибудь должен быть? папку куда копировать рисунки нужно указывать?

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 13:44)   письмо автору
 
   для: pautina   (05.01.2012 в 13:40)
 

а foreach() чем не цикл?
конечно надо указать директорию, а можно не указывать, но тогда файлы буду скопированы рядом с файлом, в котором будет выполнятся код, но это не есть хорошо
если хотите оставить имена файлов прежними, то можно воспользоваться функцией basename()

  Ответить  
 
 автор: pautina   (05.01.2012 в 13:48)   письмо автору
 
   для: Slo_Nik   (05.01.2012 в 13:44)
 

Смотрите у меня будет текстовый файл
http://www.photoshop-master.ru/lessons/les1677/1.jpg 
http://www.photoshop-master.ru/lessons/les1677/2.jpg 
http://www.photoshop-master.ru/lessons/les1677/3.jpg 
... 
http://www.photoshop-master.ru/lessons/les1677/20.jpg

Эти рисунки мне нужно скопировать в images/lessons/les1677/
Имена файлов остаются теми же.
Давайте за основу ваш код возьмём
<?php  
$data 
file_get_contents("img.txt"); 
$a explode("\r\n",$data); 
foreach(
$a as $b){ 
 
// это только вывод линков, но можно в цикле скопировать в нужную директорию через copy() 
 
echo $b."<br />"
}

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 13:51)   письмо автору
 
   для: pautina   (05.01.2012 в 13:48)
 

Вы не взяли за основу мой код, Вы просто его скопировали, но ни чего не попытались сделать
вместо echo $b."<br />"; применяйте функцию copy()

  Ответить  
 
 автор: pautina   (05.01.2012 в 14:15)   письмо автору
 
   для: Slo_Nik   (05.01.2012 в 13:51)
 

<?php   
$data 
file_get_contents("img.txt");  
$a explode("\r\n",$data);  
foreach(
$a as $b){  
 
// это только вывод линков, но можно в цикле скопировать в нужную директорию через copy()   
 
copy($data$newfile);  
}
?>

Ни знаю насколько это правильно?
Мы можем зайти в файл img.txt проити по всем его строкам и рисунок который содержится в ссылке каждой строки, скопировать в image

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 14:19)   письмо автору
 
   для: pautina   (05.01.2012 в 14:15)
 

Можете пройти и скопировать.
но при чём тут $data?
если Вы делаете в цикле echo $b."<br />";, то что Вы видите?
Правильно, имена файлов, а теперь попробуйте тоже самое сделать с $data... получится бред сивой кобылы в лунную ночь.
В $data хранятся все линки на изображения, через explode() Вы создаёте массив линков, каждый линк это отдельный элемент массива, а при помощи foreach() Вы обходите все элементы массива и поочереди их обрабатываете.
если Вы хотите созранить старые имена файлов, то применяйте функцию basename() в том же цикле foreach();
после того как получите имя файла, применяйте функцию copy()
а перед foreach() определите путь к директории в которую будете копировать
Так при чём тут $data?

p.s. и $newfile тут откуда взялась, где она определена?

  Ответить  
 
 автор: pautina   (05.01.2012 в 14:28)   письмо автору
 
   для: Slo_Nik   (05.01.2012 в 14:19)
 

Вот это дело. а то я тут как с жидкостью тормозной сижу.
<?php   
$data 
file_get_contents("img.txt"); 
$newfile "путь к папке";
$a explode("\r\n",$data);  
foreach(
$a as $b){  
 
// это только вывод линков, но можно в цикле скопировать в нужную директорию через copy()  
 // echo $b."<br />";  
 
copy($b$newfile); 
}

Ни посмотрите?

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 14:31)   письмо автору
 
   для: pautina   (05.01.2012 в 14:28)
 

кроме пути к папке Вам надо указать имя файла под которым он будет записан в эту папку.
Вы пробовали запустить свой код, что получилось?

  Ответить  
 
 автор: pautina   (05.01.2012 в 14:33)   письмо автору
 
   для: Slo_Nik   (05.01.2012 в 14:31)
 

Да запускал на каждый рисунок выходит ошибка
http://www.photoshop-master.ru/lessons/les1677/1.jpg
Warning: copy() [function.copy]: Filename cannot be empty in Z:\home\photoshop-portal\www\myscripts\copy_img.php on line 7
http://www.photoshop-master.ru/lessons/les1677/2.jpg

Скажите а как описать путь для папки, и имя файлов.

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 14:41)   письмо автору
 
   для: pautina   (05.01.2012 в 14:33)
 

Ошибка говорит о том, что имя файла не может быть пустым.
в функции copy() Вы не указали имя файла.
Определитесь, каким должно быть имя файла, остаться старым или Вы хотите новое имя файлу присвоить. Проще конечно оставить старое, тем более, что оно вполне приемлемо, не слишком мудрённое и длинное....
если старым будете оставлять, то воспользуйтесь функцией basename()... (блин, надоело уже писать одно и тоже)
ну а путь Вы уже определили в переменной $newfile, но правильней будет назвать эту переменную $path ))))
только на конце пути должен быть обязательно слеш /
$path = "dir/"; - вот Вам и путь куда сохранять файлы

  Ответить  
 
 автор: pautina   (05.01.2012 в 14:50)   письмо автору
 
   для: Slo_Nik   (05.01.2012 в 14:41)
 

Ни посмотрите код

<?php   
$data 
file_get_contents("img.txt"); 
$path "home/photoshop-portal/www/images/les1677/";
$a explode("\r\n",$data);  
foreach(
$a as $b){  
 
// это только вывод линков, но можно в цикле скопировать в нужную директорию через copy()  
 // echo $b."<br />"; 
 
basename($b); 
 
copy($b$path); 
}
?>

Выходит ошибка
Warning: copy(home/photoshop-portal/www/images/1677/) [function.copy]: failed to open stream: No such file or directory in Z:\home\photoshop-portal\www\myscripts\copy_img.php on line 9

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 15:01)   письмо автору
 
   для: pautina   (05.01.2012 в 14:50)
 

зачем вот это?

<?php
$path 
"home/photoshop-portal/www/images/1677/";

я же написал как указать путь к папке.
Она должна быть заранее создана, этот вариант кода, что я привёл не предполагает динамического создания директории.
если у Вас скрипт лежит в "www/myscript/script.php", то директория должна находится на одном уровне с ним "www/myscript/image".
Ошибка говорит о том, что не может скрипт скопировать файл в директорию, потому что этой директории нет по тому пути, по которому Вы указали
вот это тоже не верно
basename($b);
В $b хранится адрес картинки, с которого Вы будете её копировать, а так получится, что Вы пытаетесь скопировать картинку неизвестно откуда
правильно будет

<?php
$c 
basename($b);
copy($b$path.$c)

  Ответить  
 
 автор: cheops   (05.01.2012 в 15:12)   письмо автору
 
   для: pautina   (05.01.2012 в 14:50)
 

>$path = "home/photoshop-portal/www/images/1677/";
Если используете абсолютный путь, то указывайте его полностью, включая корень диска
<?php
// Это неправильный путь
$path "home/photoshop-portal/www/images/1677/";
// Это правильный путь
$path "/home/photoshop-portal/www/images/1677/";
?>

  Ответить  
 
 автор: cheops   (05.01.2012 в 14:54)   письмо автору
 
   для: pautina   (05.01.2012 в 14:33)
 

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

  Ответить  
 
 автор: pautina   (05.01.2012 в 14:56)   письмо автору
 
   для: cheops   (05.01.2012 в 14:54)
 

Скрипт лежит в папке
www/myscripts/
а папка в которой должны лежать рисунки
home/photoshop-portal/www/images/les1677/

  Ответить  
 
 автор: cheops   (05.01.2012 в 15:14)   письмо автору
 
   для: pautina   (05.01.2012 в 14:56)
 

Если у вас есть абсолютный путь $path, добавьте к нему имя файла, это имя удобно извлечь при помощи функции basename()
<?php
  $path 
"/home/photoshop-portal/www/images/les1677/";
  
$img "http://www.photoshop-master.ru/lessons/les1677/20.jpg";
  
$filename basename($img);
  
// Значение для второго параметра функции copy()
  
$local_path $path.$filename;
?>

  Ответить  
 
 автор: Slo_Nik   (05.01.2012 в 15:17)   письмо автору
 
   для: cheops   (05.01.2012 в 15:14)
 

Да запарился я уже писать автору про basename() )))
может Вас послушает )))

  Ответить  
 
 автор: pautina   (05.01.2012 в 15:20)   письмо автору
 
   для: pautina   (05.01.2012 в 14:56)
 

Надо же всего 5 строк кода, а все что нужно сделали.
И скопировалось то как, автоматически всё,
Спасибо вам большое, файлы определённо нужно закреплять.

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

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