| Доброго времени суток. Возникла необходимость написать простенький ftp сканер. Воспользовался Вашим шаблоном и немного его усовершенствовал. Необходимо было сделать так, что бы сканер подключался к серверу по ftp, считывал название файла, его размер, а также первые и последние 64 байта, и после этого все значения заносились бы в базу данных. В итоге для тестовых директорий с тестовыми текстовыми файлами сканер работает без проблем, а при работе с реальными файлами на сервере при считывании первых и/или последних 64 байт возникают проблемы. С чем бы это могло быть связано? Привожу код сканера.
index.php
<?php
// Устанавливаем соединение с FTP-сервером
require_once("config_ftp.php");
require_once("config_mysql.php");
require_once("scan_ftp.php");
// Директория на сервере
$dir = "scaner/public_html";
// Очищаем устаревшие данные в базе данных
$query = "TRUNCATE data";
if (!mysql_query($query))
{
echo 'Ошибка очистки базы данных';
}
// Запускаем сканер
scan_ftp($link, $dir);
// Закрываем соединение с FTP-сервером
ftp_close($link);
// Вывод результатов
require_once 'output.php';
?>
|
mysql_config.php
<?php
// MYSQL connect
// MySQL server address
$dblocation = 'localhost';
// name of database on hosting
$dbname = '**********';
// name of the database user
$dbuser = '**********';
// and his password
$dbpasswd = '**********';
// set connection with database
$conn = mysql_pconnect($dblocation, $dbuser, $dbpasswd);
if (!$conn)
{
echo "Невозможно установить соединение с MySQL-сервером";
}
// select database
if (!mysql_select_db($dbname, $conn))
{
echo "Ошибка выбора базы данных";
}
// Specify the character encoding, in which data will be sent MySQL-server
mysql_query("SET NAMES 'utf-8'");
mysql_query("SET collation_connection='utf8_general_ci'");
mysql_query("SET collation_server='utf8_general_ci'");
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='utf8'");
mysql_query("SET character_set_results='utf8'");
mysql_query("SET character_set_server='utf8'")
?>
|
ftp_config.php
<?php
// FTP connect
// Адрес FTP-сервера
$ftp_server = "************";
// Порт соединения
$ftp_port = 21;
// Пользователь
$ftp_user = "************";
// Пароль
$ftp_password = "************";
// Версия Web-приложение
$version = "1.0.0";
// Устанавливаем время исполнения скрипта 120 с
@set_time_limit(120);
// Пытаемся установить соединение с FTP-сервером
$link = ftp_connect($ftp_server, 21, 20);
if(!$link) puterror("К сожалению, не удаётся установить соединение с FTP-сервером $ftp_server");
// Осуществляем регистрацию на сервере
$login = ftp_login($link, $ftp_user, $ftp_password);
//$login = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if(!$login) puterror("К сожалению, не удаётся зарегистрироваться на сервере");
// Небольшая вспомогательная функция, которая выводит сообщение об ошибке
// в окно браузера
function puterror($message)
{
echo "<center><p class=help>$message</p>";
exit();
}
?>
|
output.php
<?php
// Извлекаем сведения из базы данных
$query = "SELECT * FROM data ORDER BY name";
$result = mysql_query($query);
if(!$result)
{
echo 'Ошибка обращения к базе данных';
}
echo '<table width=100% border=1>
<tr>
<td width=15% align=center>Имя файла</td>
<td width=25% align=center>Путь</td>
<td width=10% align=center>Размер</td>
<td width=25% align=center>Первые 64 байта</td>
<td width=25% align=center>Последние 64 байта</td>
</tr>';
if(!mysql_num_rows($result))
{
echo "<tr><td align=center colspan=4>Нет данных</td></tr>";
}
;
while ($data = mysql_fetch_assoc($result))
{
echo "<tr><td width=15% align=center >
$data[name]</td>";
echo "<td width=25% align=center >
$data[path]</td>";
echo "<td width=10% align=center >
$data[size]</td>";
echo "<td width=25% align=center >
$data[first]</td>";
echo "<td width=25% align=center >
$data[last]</td></tr>";
}
echo '</table>';
?>
|
scan_ftp.php
<?php
function scan_ftp($link, $dir)
{
GLOBAL $filename;
// Получаем все файлы корневого каталога
// Дескриптор соединения $link получен в config.php
$file_list = ftp_rawlist($link, $dir);
// Выводим содержимое каталога
foreach($file_list as $file)
{
// Разбиваем строку по пробельным символам
list($acc,
$bloks,
$group,
$user,
$size,
$month,
$day,
$year,
$file) = preg_split("/[\s]+/", $file);
//Если файл начинается с точки - игнорируем его
if(substr($file, 0, 1) == '.') continue;
// Определяем является ли объект директорией
if(substr($acc, 0, 1) == 'd')
{
// Директория
scan_ftp($link, $dir.'/'.$file);
}
// Определяем является ли объект файлом
if(substr($acc, 0, 1) == '-')
{
// Файл
$filename[] = $file." - ".$dir.'/'.$file;
$fileopen = fopen("/home/o/*********/$dir/$file","r");
if(!fileopen)
{
echo("Ошибка открытия файла");
}
else
{
$first = fread ($fileopen,63);
if ($size < 64) $last = $first;
else
{
$point = $size - 64;
fseek($fileopen, $point);
$last = fread ($fileopen,64);
}
fclose($fileopen);
}
// чтение и запись в базу данных
if ( get_magic_quotes_gpc() )
{
$first = mysql_real_escape_string($first);
$last = mysql_real_escape_string($last);
}
$query = "insert data
SET name = '$file',
path = '/home/o/*********/$dir/$file',
size = $size,
first = '$first',
last = '$last',
time = now()" ;
if (!mysql_query($query))
{
echo 'Ошибка записи в базу данных ';
echo $query.'<br>';
}
}
}
}
?>
|
| |