2

我正在使用 PECL ssh2 模块将 XML 数据输出到 sftp 服务器。我有两个完全独立的 PHP 脚本,它们收集不同的数据并将输出发送到 stfp 服务器上的不同文件。

客户出口:

$conn = ssh2_connect(SFTP_SERVER, SFTP_PORT);
ssh2_auth_password($conn, SFTP_USER, SFTP_PWD);
$sftp = ssh2_sftp($conn);
$file = 'ssh2.sftp://' . $sftp . CUSTOMER_EXPORT_PATH . CUSTOMER_EXPORT_FILENAME;
$doc = new DOMDocument('1.0','UTF-8');
CustomerExportXML($doc);
if (file_exists($file)) {
    unlink($file);
}
$bytes_saved = $doc->save($file);

产品出口:

$conn = ssh2_connect(SFTP_SERVER, SFTP_PORT);
ssh2_auth_password($conn, SFTP_USER, SFTP_PWD);
$sftp = ssh2_sftp($conn);
$file = 'ssh2.sftp://' . $sftp . PRODUCT_EXPORT_PATH . PRODUCT_EXPORT_FILENAME;
$doc = new DOMDocument('1.0','UTF-8');
ProductExportXML($doc);
if (file_exists($file)) {
    unlink($file);
}
$bytes_saved = $doc->save($file);

在每种情况下,该XxxExportXML($doc)函数都需要几分钟来收集相关数据并将其填充到 $doc 中。

每个脚本都按原样工作并将正确的数据导出到正确的位置。

问题是当它们的执行重叠时,只有最后一个执行的实际写入 sftp 服务器。如果我回显 $file 变量,那么在每种情况下它们都具有相同的资源 ID ssh2.sftp://ResourceID#150/Customer/Customer.xml,即ssh2.sftp://ResourceID#150/Product/Product.xml

所以我的问题是为什么这两个进程会相互干扰,我该如何修复它以便它们可以同时运行?

4

1 回答 1

0

所以它们是两个不同的脚本?这很奇怪。也许尝试phpseclib,一个纯 PHP SFTP 实现,而不是。例如。

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
于 2013-01-31T18:41:34.800 回答