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

Форум PHP

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

 

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

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

тема: Как вызвать функцию?
 
 автор: tonechka   (09.10.2010 в 22:22)   письмо автору
 
 

Всем доброго времени суток! у меня такой вопрос. есть у меня скрипт ftp.php, в нем следующая функция:
function copy_ftp($connect, $local_dir, $directory)
    {
     ftp_chdir($connect, "course/mods");
        echo $local_dir." - ".$directory."<br/>";
        //узнаю какие файлы находятся в каталоге
        $site = ftp_nlist($connect, $directory); 
        //в цикле перебираю файлы
        foreach ($site as $value)
        {
           //echo $value."<br>";
           if (($value == '.') or ($value == '..')) continue;
           
           if(ftp_size($connect, $value) == -1)
            {
              echo $local_dir."/".$value;
              echo "<br/>";
              mkdir($local_dir."/".$value);
              ftp_chdir($connect,$value);
              copy_ftp($connect, $local_dir.'/'.$value, $directory);
              ftp_chdir($connect,"..");
            }
          
          else
            {
              $copy=ftp_get($connect, $local_dir."/".$value, $value,  FTP_BINARY);
            }
         
        }          
        
    }


и есть другой скрипт, index.php.
    require_once('ftp.php');
    $local_dir="D:/mydisk/10";
    $directory="";
copy_ftp($connect, $local_dir, $directory); 


мне из него нужно вызвать эту функцию, но не могу... вылезают ошибки такого типа:
Warning: ftp_chdir(): 3 is not a valid FTP Buffer resource
ftp_nlist(): 3 is not a valid FTP Buffer resource

Я не могу понять, в чем проблема, и что я не так делаю при вызове функции??? подскажите плиз?

  Ответить  
 
 автор: Trianon   (09.10.2010 в 22:53)   письмо автору
 
   для: tonechka   (09.10.2010 в 22:22)
 

включите диагностику ошибок и убедитесь, что переменная $connect не определена.

  Ответить  
 
 автор: tonechka   (09.10.2010 в 23:05)   письмо автору
 
   для: Trianon   (09.10.2010 в 22:53)
 

она определена в файле ftp.php!!!! просто я не стала сюда писать!!!

  Ответить  
 
 автор: heed   (10.10.2010 в 00:13)   письмо автору
 
   для: tonechka   (09.10.2010 в 23:05)
 

смотрите значения переменных
, например вот это работает
<?php

function copy_ftp($connect$local_dir$dir) {
    echo 
'<h3>'$local_dir .' - '$dir ."</h3>\n";
    
$list ftp_nlist($connect$dir);
    foreach (
$list as $v//в цикле какие файлы
    
{
        if ((
$v == '.') or ($v == '..')) continue;
//        var_dump(ftp_size($connect, $dir .'/'. $v));
//        echo $local_dir .'/'. $v .' '. $dir .'/'. $v;
//        exit();
            
if (ftp_size($connect$dir .'/'$v) == -1)  {
                echo 
$dir .'/'$v  ."<br/>\n";
                if (! 
mkdir($local_dir .'/'$v)) echo 'mkdir('$local_dir .'/'$v
                        
.') FAILED'  ."<br/>\n";
                else 
copy_ftp($connect$local_dir .'/'$v$dir .'/'$v);
            }
            else echo (
ftp_get($connect$local_dir .'/'$v$dir .'/'$v,  FTP_BINARY))
                ? 
$dir .'/'$v .' скопирован'  ."<br/>\n"
                
$dir .'/'$v .' не скопирован!'  ."<br/>\n";
        echo 
"<hr/>\n\n";
        
flush();
    }
}
#_________________________________________________________________


if (!($link ftp_connect('ftp.funet.fi'))) exit('Сервер не отвечает');
if (!
ftp_login($link'anonymous''john@doe.com')) exit('нет регистрации');
//ftp_pasv($link, true);
if (!is_dir('./image/test')) exit('некуда копировать');

copy_ftp($link'./image/test''/pub/astro/dbases/observations/deepsky/other_cl');


но если сервер поменять на 'ftp.ru' каталог какой-нибудь тоже в /pub/ , и раскомментировать в функции три строчки, то увидите что функция ftp_nlist() там возвращает имена с полными путями. соответственно ничего работать не будет.

//ps c моей скоростью даже этот скрипт вылетел по max_execution_time

  Ответить  
 
 автор: Trianon   (10.10.2010 в 01:25)   письмо автору
 
   для: tonechka   (09.10.2010 в 23:05)
 

Вы диагностику включили или нет?
error_reporting(E_ALL);
тройка, кстати, и вправду врядли адекватное определение.

  Ответить  
 
 автор: tonechka   (10.10.2010 в 10:32)   письмо автору
 
   для: Trianon   (10.10.2010 в 01:25)
 

Конечно включила!!! поэтому он и выдает такие ошибки, а без этого просто не работал и молчал!!!! )))

  Ответить  
 
 автор: Trianon   (10.10.2010 в 10:51)   письмо автору
 
   для: tonechka   (10.10.2010 в 10:32)
 

вот в этом Вашем фрагменте я добавил одну строку echo.

  require_once('ftp.php');
    $local_dir="D:/mydisk/10";
    $directory="";
echo $connect;
copy_ftp($connect, $local_dir, $directory);


в переменной $connect почему-то лежит число.
а должен лежать дескриптор открытого FTP-соединения.
Результат вызова функции ftp_connect()

Из фрагмента видно, что саму переменную Вы не определили.
Тем не менее диагностика показывает, что значение ей присвоено - числовое.
Почему так, может знать лишь автор кода.

  Ответить  
 
 автор: tonechka   (10.10.2010 в 14:31)   письмо автору
 
   для: Trianon   (10.10.2010 в 10:51)
 

>вот в этом Вашем фрагменте я добавил одну строку echo.
у меня ничего не выводится((( а автор кода, ни кто иной, как я... кодик я сама написала. но я не могу понять почему если вызываю из файла где написана функция, все работает, а если из другого скрипта, то нет

  Ответить  
 
 автор: .....   (10.10.2010 в 15:24)
 
   для: tonechka   (10.10.2010 в 14:31)
 

в вашем коде много непонятного

> ftp_chdir($connect, "course/mods");
для чего переходить при каждой итерации функции в какую-то загадочную дирректорию с относительным путём ???

> copy_ftp($connect, $local_dir, $directory);
я так понимаю равноценно copy_ftp($connect, 'D:/mydisk/10', '');

дирректория 'D:/mydisk/10' существует?
выше вызова функции (неважно в каких файлах) проверяется успешность соединения и авторизации ?
похоже на
if (!($connect = ftp_connect('ftp-сервер'))) exit('Сервер не отвечает');
if (!ftp_login($connect, 'логин', 'пароль')) exit('нет регистрации');

  Ответить  
 
 автор: tonechka   (10.10.2010 в 19:09)   письмо автору
 
   для: .....   (10.10.2010 в 15:24)
 

> ftp_chdir($connect, "course/mods");
>>для чего переходить при каждой итерации функции в какую-то загадочную дирректорию с относительным путём ???>в вашем коде много непонятного

это просто я пока тестирую так, а вообще там будет динамический путь!!!

> copy_ftp($connect, $local_dir, $directory);
>>так понимаю равноценно copy_ftp($connect, 'D:/mydisk/10', '');

не совсем, копируем туда, но откуда это как раз и будет динамическое....

успешность соединения и авторизации проверяется в файле где написана функция.

  Ответить  
 
 автор: Trianon   (10.10.2010 в 18:21)   письмо автору
 
   для: tonechka   (10.10.2010 в 14:31)
 

так. Если ничего не выводится, то меняем эту строчку (echo) на две других.
error_reporting(E_ALL|E_NOTICE);
var_dump($connect);

  Ответить  
 
 автор: tonechka   (10.10.2010 в 19:12)   письмо автору
 
   для: Trianon   (10.10.2010 в 18:21)
 

так... поменяла.. теперь выводит

resource(3) of type (Unknown)

((( ему тип соединения чтоль не нравится?

  Ответить  
 
 автор: Trianon   (10.10.2010 в 19:32)   письмо автору
 
   для: tonechka   (10.10.2010 в 19:12)
 

require_once('ftp.php');
    $local_dir="D:/mydisk/10";
    $directory="";
echo $connect;
copy_ftp($connect, $local_dir, $directory);



в этом фрагменте вообще не видно, откуда взялась переменная $connect, и что в ней содержится.
Может там то что нужно... а может и нет.
Но ругань-то идет именно на ту переменную...

  Ответить  
 
 автор: tonechka   (10.10.2010 в 19:47)   письмо автору
 
   для: Trianon   (10.10.2010 в 19:32)
 

$host = "ftp.ru"; (например)
  $connect = ftp_connect($host);
  if(!$connect)
  {
    echo("Ошибка соединения");
    exit;
  }
  else
  {
    echo("Соединение установлено");  
  }
//echo $connect;
  $user = "user";
  $password = "111";
  $result = ftp_login($connect, $user, $password);
 
 if ($result)
  {
  echo "<br>";
  echo "пароль и логин верные";
  echo "<br>";
  }
  else
  echo "пароль и логин не верны";


Вот это у меня в файле где сама функция написана!!!

  Ответить  
 
 автор: heed   (10.10.2010 в 20:29)   письмо автору
 
   для: tonechka   (10.10.2010 в 19:47)
 

так со всеми серверами?

запустите тестовый скрипт , заменив ftp5.ru.freebsd.org на нужный вам сервер
<?php
header
('content-type: text/plain'); 

echo 
$_SERVER['SERVER_SOFTWARE'] ."\n"PHP_VERSION ."\n\n";

if (!(
$link ftp_connect('ftp5.ru.freebsd.org'))) exit('Сервер не отвечает'); 
var_dump($link);
var_dump(ftp_raw($link"SYST"));
var_dump(ftp_raw($link"FEAT"));

//if (!ftp_login($link, 'anonymous', 'john@doe.com')) exit('нет регистрации');
//var_dump($link);

?>

resource(2) of type (FTP Buffer) у меня.

  Ответить  
 
 автор: tonechka   (10.10.2010 в 21:06)   письмо автору
 
   для: heed   (10.10.2010 в 20:29)
 

вот когда я вызываю из того же скрипта где функция, он мне тоже пишет resource(2) of type (FTP Buffer), а когда пытаюсь из другого то, выдает 3 или 4((((

  Ответить  
 
 автор: heed   (10.10.2010 в 21:52)   письмо автору
 
   для: tonechka   (10.10.2010 в 21:06)
 

может дело в том что require_once() ,одного и того-же файла, вызванное в участвующих скриптах дважды второй раз не выполняет его?

  Ответить  
 
 автор: heed   (10.10.2010 в 22:04)   письмо автору
 
   для: tonechka   (10.10.2010 в 21:06)
 

или похоже на то что где-то была вызвана ftp_close();
у меня в таком случае resource(2) of type (Unknown)

  Ответить  
 
 автор: tonechka   (10.10.2010 в 22:16)   письмо автору
 
   для: heed   (10.10.2010 в 22:04)
 

ну ftp_close() у меня вызывается в том же файле где функция, в самом конце..Это неправильно?

  Ответить  
 
 автор: heed   (10.10.2010 в 22:25)   письмо автору
 
   для: tonechka   (10.10.2010 в 22:16)
 

да :) это закрывает соединение с ftp-сервером

  Ответить  
 
 автор: tonechka   (10.10.2010 в 22:28)   письмо автору
 
   для: heed   (10.10.2010 в 22:25)
 

блин, тогда я вообще ничего не понимаю(((( как же тогда вызвать то эту функцию то(((((

  Ответить  
 
 автор: heed   (10.10.2010 в 22:55)   письмо автору
 
   для: tonechka   (10.10.2010 в 22:28)
 

...

  Ответить  
 
 автор: heed   (10.10.2010 в 22:59)   письмо автору
 
   для: tonechka   (10.10.2010 в 22:28)
 

можно совсем не вызывать, пхп после завершения выполнения кода сам прибивает все открытые соединения, закрывает дескрипторы. Но если хотите сделать это раньше, то после того как выполнились все ftp_* функции и пользовательские функции в которых есть вызовы этих ftp_*
, и если закрываемый дескриптор является дескриптором успешно открытого соединения.

  Ответить  
 
 автор: tonechka   (11.10.2010 в 21:15)   письмо автору
 
   для: heed   (10.10.2010 в 22:59)
 

Убрала,я вызов ftp_close, но все равно не работает... что ж такое то((((((

  Ответить  
 
 автор: Trianon   (10.10.2010 в 21:01)   письмо автору
 
   для: tonechka   (10.10.2010 в 19:47)
 

В каком файле не так существенно, как в каком процессе.
Переменные принадлежат не файлам, а исполняемым процессам.

  Ответить  
 
 автор: Киналь   (10.10.2010 в 10:43)   письмо автору
 
   для: tonechka   (09.10.2010 в 22:22)
 

> вылезают ошибки такого типа:
>Warning: ftp_chdir(): 3 is not a valid FTP Buffer resource
>ftp_nlist(): 3 is not a valid FTP Buffer resource
>
>Я не могу понять, в чем проблема, и что я не так делаю при вызове функции??? подскажите плиз?

Где-то была шикарная фраза, не помню где, но смысл примерно такой: «Начинающие программисты относятся к сообщениям об ошибках, как двоечники к вредному завучу: орёт не за дело, а просто так, потому что оболтус»

Вот и здесь. Вам чёрным по белому написали: то, что вы передаёте в функцию ftp_chdir(), ей не нравится. А именно, ей не нравится, что вы передаёте ей число «3». Так посмотрите, что вы передаёте этой функции, откуда взялась эта тройка, и так далее.

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

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