Подскажите какой командой можно узнать имена всех директорий на ftp сервере? Подключаюсь через стандартную функцию ftp_connect. Вроде нашла ftp_rawlist. Но он выводит список всех файлов и дир. Как узнать что это директория не используя регулярок и substr Как сказали можно заюзать GLOB Only_dir. Но вроде бы эта функция работает не на всех хостингах. Надо бы чтобы работала везде.
Rastamanka чем вам не нравится substr? huzker2 фейки запрещены, если что, и код вам не напишут тут. Плюс вы хотите, чтобы работу сделали за вас, видимо, это второй провал
Вы пользовались хоть раз rawlist? Он выводит в 2-х разных видов(linux,win) данные при этом с фалагами(правами,временем создания и т.д.). По этому чтобы заюзать substr_count до этого надо будет задействовать регулярки.. В общем вроде вашла выход ftp_nlist(обязательно использовать -a $dir) иначе не на всех фтп выводит папки а только файлы. Осталось определить какие из них папки а какие нет. Да и хотелось бы чтобы 100% рабочий способ определения папка это или файл ибо может так же папка содержать точку и т.д. В общем решение найдено. Малоли кому понадобавится. PHP: $ftp_list = ftp_nlist($conn, "-a /"); foreach($ftp_list as $value) { $dir = ftp_size ($conn, $value); // проверяем папка это или нет if($dir == '-1') { echo "$value <br>"; } } Хотя все таки помощь нужна. Оказалось что на некоторых фтп отключена функция распознавания размера файла и в итоге файлы тоже выдают ответ -1. Конечно можно проверять $dir_toch = substr_count($value,"."); но это все не то. Точного ответа это не даст.
Rastamanka В комменатриях к документации функции ftp_nlist() предлагается использовать вот такую функцию, если не поддерживается ftp_size(): PHP: function ftp_is_dir($dir) { global $ftp_connect; if (ftp_chdir($ftp_connect, $dir)) { ftp_chdir($ftp_connect, '..'); return true; } else { return false; } } http://docs.php.net/manual/en/function.ftp-nlist.php#78447
Кто подскажет. Для принятия данных в инете используеться $_POST,$_GET,$_REQUEST. А если мне надо передать какой то параметр через консоль скрипту то как принимать его? Через консоль то есть cmd.
Rastamanka PHP: var_dump($argv); // - параметры командной строки echo fgets(STDIN, 1024); // стандартный (клавиатурный) ввод
Насколько я понял ТС надо другое. PHP: <?php $handle = popen("/bin/ls", "r"); ?> PHP: <?php error_reporting(E_ALL); /* Добавляем перенаправление чтобы прочитать stderr. */ $handle = popen('/path/to/spooge 2>&1', 'r'); echo "'$handle'; " . gettype($handle) . "\n"; $read = fread($handle, 2096); echo $read; pclose($handle); ?> Т е можно просто открыть процесс, послать в него информацию, принять и закрыть процесс. Но не стоит забывать о функции system и exec. Так же почитайте о функции proc_open. proc_open() похожа на popen(), но предоставляет больший контроль над выполнением программы. cmd это команда, выполняемая оболочкой. descriptorspec это индексированный массив, в котором ключи представляют номера дескрипторов, а значения представляют то, как PHP передаёт эти дескрипторы в дочерний процесс. pipes будет установлен в индексированный массив файловых указателей, соответствующий концу любых созданных каналов. return-значение является ресурсом представляющим процесс; вы должны освободить его с помощью proc_close() по окончании работы с ним. PHP: $descriptorspec = array( 0 => array("pipe", "r"),// stdin это канал, из которого потомок будет читать 1 => array("pipe", "w"),// stdout это канал, в который потомок будет записывать 2 => array("file", "/tmp/error-output.txt", "a"), // stderr это файл для записи ); $process = proc_open("php", $descriptorspec, $pipes); if (is_resource($process)) { // $pipes выглядит теперь примерно так: // 0 => записываемый дескриптор, соединённый с дочерним stdin // 1 => читаемый дескриптор, соединённый с дочерним stdout // Любой вывод ошибки будет присоединён к /tmp/error-output.txt fwrite($pipes[0], "<?php echo \"Hello World!\"; ?>"); fclose($pipes[0]); while(!feof($pipes[1])) { echo fgets($pipes[1], 1024); } fclose($pipes[1]); // Важно, чтобы вы закрыли любые каналы до вызова // proc_close, чтобы исключить тупиковую блокировку $return_value = proc_close($process); echo "command returned $return_value\n"; } Так же существует функция passthru, escapeshellcmd, shell_exec...... Этот список можно без конечно продолжать. Советую о всех них почитать, прежде чем что то писать.
Подскажите, как это работает? Что вообще вызывает выполнение кода, ведь функция вроде как строковая? PHP: preg_replace("/.*/e", "eval('phpinfo();');", ".");
Класс для подсчёта траффика Привет всем, уже давно ищу библиотеку для подсчёта количества траффика исходящего из скрипа php к примеру. есть ли какие варианты?
давно для себя делал PHP: <?php $server = "127.0.0.1"; $maxband = "500000"; $mirror = "mirror.yoursite.com"; $handle = fopen ("http://$server/server-status?auto", "r"); while (!feof($handle)) { $buffer=fread($handle,4096); } fclose($handle); list($th,$tb,$cpu,$uptime,$rs,$bs,$br,$busy,$idle,$scoreboard)= split ("\n", $buffer); /* Additional things to parse... don't need them here, but they're available. $th = ereg_replace(".*Total Accesses: ", "", $th); $tb = ereg_replace(".*Total kBytes: ", "", $tb); $cpu = ereg_replace(".*CPULoad: ", "", $cpu); $uptime = ereg_replace(".*Uptime: ", "", $uptime); $rs = ereg_replace(".*ReqPerSec: ", "", $rs); $br = ereg_replace(".*BytesPerReq: ", "", $br); */ $bs = ereg_replace(".*BytesPerSec: ", "", $bs); if ($bs > $maxband) { $location = "http://$mirror/$file"; } else { $location = "http://$server/$file"; } echo "<p>$server limit is $maxband bytes. Current bandwidth is $bs.</p>"; echo "<p>Sending you to <b>$location</b>.</p>"; ?>
Говоришь давно себе писал?Тебя Алекс Мондалексис зовут?Это же не твой код... http://gb.moundalexis.com/~alexm/downloads/load.phps
всем привет PHP: if($_GET['action']== 'logout') { session_destroy(); } как в этот код засунут хедер после удаления сессии?
Кто - то еще сессиями пользуется? Юзай кукисы и не будет никаких проблем, Сессии только сервер зря напрягает хламом.
да пользуется) напрягает сервер но,а безопасность? любой желающий может стырить куки...это как трахат девушку без гондона не думая о последствия актуально
Nelz. в чем собственно вопрос? PHP: if($_GET['action']== 'logout') { session_destroy(); header('Location: http://ya.ru'); die(); } Дополнительно, рекомендую прочитать документацию: http://php.net/session_destroy
я это знаю,дело в этом Warning: Cannot modify header information - headers already sent by PHP: <?php session_start(); if ($_SESSION['username']) { echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; if($_GET['action']== 'logout') { session_destroy(); header('Location: http://ya.ru'); die(); } } else die(""); ?> как засунут хедер после удаления сессии? туда просто так не пихнеш
Проблемма в этом: echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; Убери и будет тебе счастье
Да всё потому что ты выводишь эту строку: PHP: echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; До header недолжно быть никакого вывода информации в браузер, поскольку она отправляет HTTP заголовки, но она их неможет отправить, поскольку они уже были выведены. Так что можно использовать так: PHP: <?php session_start(); if ($_SESSION['username']) { if($_GET['action']== 'logout') { session_destroy(); header('Location: http://ya.ru'); die(); } echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; } else die(""); ?> Или переадресовывать через META: PHP: <?php session_start(); if ($_SESSION['username']) { echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; if($_GET['action']== 'logout') { session_destroy(); echo ' <META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://ya.ru">'; die(); } } else die(""); ?> Или на Javascript: PHP: <?php session_start(); if ($_SESSION['username']) { echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; if($_GET['action']== 'logout') { session_destroy(); echo ' <script type="text/javascript"> window.location = "http://ya.ru/" </script>'; die(); } } else die(""); ?>
Заголовки должны отправляться до вывода в браузер. Соответственно сначала header() а потом echo. PHP: if ($_SESSION['username']) { if($_GET['action']== 'logout') { session_destroy(); header('Location: http://ya.ru'); die(); } echo "Welcome, ".$_SESSION['username']."!<br><a href='member.php?action=logout'> Logout </a>"; }