matab-panel/scripts/test-ftp.php

111 lines
3.6 KiB
PHP

<?php
$ip = $argv[1] ?? null;
$port = (int)($argv[2] ?? 2121);
$user = $argv[3] ?? 'root';
$pass = $argv[4] ?? 'Mjoshanitcm7717';
if (!$ip) {
$envFile = __DIR__ . '/../.env';
if (file_exists($envFile)) {
foreach (file($envFile) as $line) {
$line = trim($line);
if (strpos($line, 'SYNC_PEER_IP=') === 0) {
$ip = trim(substr($line, 13), '"\'');
}
}
}
}
if (!$ip) {
$pdo = null;
$dbEnv = [];
foreach (file(__DIR__ . '/../.env') as $line) {
$line = trim($line);
if (strpos($line, '=') === false || $line[0] === '#') continue;
[$k, $v] = explode('=', $line, 2);
$dbEnv[trim($k)] = trim($v, '"\'');
}
try {
$dsn = "mysql:host=" . ($dbEnv['DB_HOST'] ?? '127.0.0.1')
. ";port=" . ($dbEnv['DB_PORT'] ?? '3306')
. ";dbname=" . ($dbEnv['DB_DATABASE'] ?? '');
$pdo = new PDO($dsn, $dbEnv['DB_USERNAME'] ?? 'root', $dbEnv['DB_PASSWORD'] ?? '');
$ip = $pdo->query("SELECT init_value FROM osurg_initials WHERE init_parameter='sync_peer_ip'")->fetchColumn() ?: $ip;
$port = (int)($pdo->query("SELECT init_value FROM osurg_initials WHERE init_parameter='ftp_port'")->fetchColumn() ?: $port);
$user = $pdo->query("SELECT init_value FROM osurg_initials WHERE init_parameter='ftp_user'")->fetchColumn() ?: $user;
$pass = $pdo->query("SELECT init_value FROM osurg_initials WHERE init_parameter='ftp_pass'")->fetchColumn() ?: $pass;
} catch (\Throwable $e) {}
}
if (!$ip) {
echo "ERROR: IP سیستم مطب مشخص نیست.\n";
echo "Usage: php test-ftp.php 192.168.1.X\n";
exit(1);
}
echo "==========================================\n";
echo " تست FTP سیستم مطب\n";
echo "==========================================\n";
echo "IP : {$ip}\n";
echo "Port : {$port}\n";
echo "User : {$user}\n\n";
echo "[1] بررسی پورت {$port}... ";
$sock = @fsockopen($ip, $port, $errno, $errstr, 5);
if ($sock) {
fclose($sock);
echo "باز است ✓\n";
} else {
echo "بسته است ✗ ({$errstr})\n";
echo "\n=> FTP server روی سیستم مطب اجرا نیست.\n";
echo " scripts\\start-ftp-server.vbs یا install.bat را اجرا کن.\n";
exit(1);
}
echo "[2] اتصال FTP... ";
$ftp = @ftp_connect($ip, $port, 10);
if (!$ftp) {
echo "ناموفق ✗\n";
exit(1);
}
echo "موفق ✓\n";
// ---- تست 3: لاگین ----
echo "[3] ورود با {$user}... ";
if (!@ftp_login($ftp, $user, $pass)) {
echo "ناموفق ✗ (کاربر یا رمز اشتباه)\n";
ftp_close($ftp);
exit(1);
}
echo "موفق ✓\n";
echo "[4] Passive mode... ";
ftp_pasv($ftp, true);
echo "OK ✓\n";
echo "[5] لیست پوشه اصلی... ";
$list = @ftp_nlist($ftp, '/');
if ($list !== false) {
echo "موفق ✓ (" . count($list) . " آیتم)\n";
} else {
echo "خالی یا خطا\n";
}
echo "[6] ارسال فایل تست... ";
$tmpLocal = tempnam(sys_get_temp_dir(), 'ftp_test_');
file_put_contents($tmpLocal, 'FTP test from ' . gethostname() . ' at ' . date('Y-m-d H:i:s'));
if (@ftp_put($ftp, '/ftp_test.txt', $tmpLocal, FTP_BINARY)) {
echo "موفق ✓\n";
@ftp_delete($ftp, '/ftp_test.txt');
echo "[6] پاکسازی فایل تست... OK ✓\n";
} else {
echo "ناموفق ✗ (مشکل دسترسی به پوشه)\n";
}
unlink($tmpLocal);
ftp_close($ftp);
echo "\n==========================================\n";
echo " همه تست‌ها موفق بودن! FTP آماده است.\n";
echo "==========================================\n";