|
|
|
| Здравствуйте Уважаемое сообщество.
Как на 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
|
| |
|
|
|
|
|
|
|
для: 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 />";
}
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(05.01.2012 в 13:24)
| | Как скопировать в нужную директорию через copy() | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 13:32)
| | copy()
один параметр для этой функции у Вас уже есть - $b;
сформируйте второй параметр и копируйте | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 12:33)
| | а какого результата вы хотите достичь чтением этого файла? | |
|
|
|
|
|
|
|
для: Valick
(05.01.2012 в 13:31)
| | Вообще я с файлами ещё не работал, имея адреса рабочих ссылок (если в них зайти, то видим рисунок) мне нужно эти рисунки скопировать в определённую папку image/lessons/les1677 например (может для этого и не нужно читать его содержимое)
Как в цикле скопировать в нужную директорию через copy() | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(05.01.2012 в 13:37)
| | Это весь участок кода 2 строчками только делается что ли.
Цикл какой нибудь должен быть? папку куда копировать рисунки нужно указывать? | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 13:40)
| | а foreach() чем не цикл?
конечно надо указать директорию, а можно не указывать, но тогда файлы буду скопированы рядом с файлом, в котором будет выполнятся код, но это не есть хорошо
если хотите оставить имена файлов прежними, то можно воспользоваться функцией basename() | |
|
|
|
|
|
|
|
для: 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 />";
}
|
| |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 13:48)
| | Вы не взяли за основу мой код, Вы просто его скопировали, но ни чего не попытались сделать
вместо echo $b."<br />"; применяйте функцию copy() | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 14:15)
| | Можете пройти и скопировать.
но при чём тут $data?
если Вы делаете в цикле echo $b."<br />";, то что Вы видите?
Правильно, имена файлов, а теперь попробуйте тоже самое сделать с $data... получится бред сивой кобылы в лунную ночь.
В $data хранятся все линки на изображения, через explode() Вы создаёте массив линков, каждый линк это отдельный элемент массива, а при помощи foreach() Вы обходите все элементы массива и поочереди их обрабатываете.
если Вы хотите созранить старые имена файлов, то применяйте функцию basename() в том же цикле foreach();
после того как получите имя файла, применяйте функцию copy()
а перед foreach() определите путь к директории в которую будете копировать
Так при чём тут $data?
p.s. и $newfile тут откуда взялась, где она определена? | |
|
|
|
|
|
|
|
для: 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);
}
|
Ни посмотрите? | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 14:28)
| | кроме пути к папке Вам надо указать имя файла под которым он будет записан в эту папку.
Вы пробовали запустить свой код, что получилось? | |
|
|
|
|
|
|
|
для: 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
Скажите а как описать путь для папки, и имя файлов. | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 14:33)
| | Ошибка говорит о том, что имя файла не может быть пустым.
в функции copy() Вы не указали имя файла.
Определитесь, каким должно быть имя файла, остаться старым или Вы хотите новое имя файлу присвоить. Проще конечно оставить старое, тем более, что оно вполне приемлемо, не слишком мудрённое и длинное....
если старым будете оставлять, то воспользуйтесь функцией basename()... (блин, надоело уже писать одно и тоже)
ну а путь Вы уже определили в переменной $newfile, но правильней будет назвать эту переменную $path ))))
только на конце пути должен быть обязательно слеш /
$path = "dir/"; - вот Вам и путь куда сохранять файлы | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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)
|
| |
|
|
|
|
|
|
|
для: 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/";
?>
|
| |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 14:33)
| | Где у вас расположен скрипт относительно папки в которой должны лежать файлы? | |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 14:54)
| | Скрипт лежит в папке
www/myscripts/
а папка в которой должны лежать рисунки
home/photoshop-portal/www/images/les1677/ | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.01.2012 в 15:14)
| | Да запарился я уже писать автору про basename() )))
может Вас послушает ))) | |
|
|
|
|
|
|
|
для: pautina
(05.01.2012 в 14:56)
| | Надо же всего 5 строк кода, а все что нужно сделали.
И скопировалось то как, автоматически всё,
Спасибо вам большое, файлы определённо нужно закреплять. | |
|
|
|