You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP Socket连接检查服务器端特定文件是否存在?

PHP基础Socket函数本身无法直接检查远程服务器上的文件是否存在——这类函数仅负责建立网络连接、传输字节流,没有内置的远程文件系统访问能力。要实现你的需求,需要借助应用层协议配合服务器端的逻辑支持,以下是可行的方案:

可行解决方案

1. 服务器端提供文件检查接口(推荐)

如果能控制目标服务器,在服务器上搭建一个简单的Socket服务,专门处理文件存在性检查请求:

服务器端Socket服务示例(PHP CLI运行)

<?php
// 服务器端:file_check_server.php
$host = '0.0.0.0';
$port = 8888;

// 创建Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

while (true) {
    $client = socket_accept($socket);
    // 接收客户端请求的文件路径
    $request = socket_read($client, 1024);
    $targetFile = trim($request);
    
    // 检查文件是否存在,返回1/0表示存在/不存在
    $exists = file_exists($targetFile) ? '1' : '0';
    socket_write($client, $exists, strlen($exists));
    socket_close($client);
}

socket_close($socket);

运行方式:php file_check_server.php

客户端Socket检查逻辑

<?php
// 客户端:交易发送脚本
$serverHost = '目标服务器IP';
$serverPort = 8888;
$targetFile = '/path/to/your/specific/file.txt';

// 循环等待文件删除
while (true) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $connect = socket_connect($socket, $serverHost, $serverPort);
    
    if ($connect) {
        // 发送要检查的文件路径
        socket_write($socket, $targetFile, strlen($targetFile));
        // 获取检查结果
        $result = socket_read($socket, 1024);
        socket_close($socket);
        
        if ($result === '0') {
            // 文件已删除,执行交易发送逻辑
            sendTransaction();
            break;
        }
    }
    
    // 间隔1秒再检查,避免频繁请求占用资源
    sleep(1);
}

function sendTransaction() {
    // 这里编写你的交易发送Socket逻辑
    echo "开始发送交易...\n";
}

2. 借助FTP/SFTP协议(如果服务器支持)

如果目标服务器开启了FTP或SFTP服务,可以使用PHP对应的扩展(ftp_*函数或ssh2_sftp_*函数)来检查文件,这是封装好的应用层协议实现:

示例(FTP方式):

<?php
$ftpHost = '目标服务器IP';
$ftpUser = 'ftp用户名';
$ftpPass = 'ftp密码';
$targetFile = '/path/to/specific/file.txt';

$ftpConn = ftp_connect($ftpHost);
ftp_login($ftpConn, $ftpUser, $ftpPass);

while (true) {
    // 列出目标目录下的文件,检查目标文件是否存在
    $fileList = ftp_nlist($ftpConn, dirname($targetFile));
    if (!in_array(basename($targetFile), $fileList)) {
        // 文件已删除,执行交易发送
        sendTransaction();
        break;
    }
    sleep(1);
}

ftp_close($ftpConn);
关键说明
  • 基础Socket函数仅负责数据传输,无法直接解析远程文件系统状态,必须通过服务器端暴露的接口或标准协议实现需求。
  • 循环检查时务必添加延迟,避免对服务器造成过大负载。
  • 生产环境中要添加异常处理(比如Socket连接失败、服务器无响应等情况),保证逻辑健壮性。

内容的提问来源于stack exchange,提问作者Juan Pablo Marin Higuita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:20:30