111 lines
3.6 KiB
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";
|