使用相同的ssh2.sftp资源分离PHP进程

时间:2013-01-25 13:00:15

标签: php sftp conflict resource-id

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

CUSTOMER EXPORT:

$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.xmlssh2.sftp://ResourceID#150/Product/Product.xml

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

1 个答案:

答案 0 :(得分:0)

所以他们是两个不同的剧本?那真是怪了。也许试试phpseclib, a pure PHP SFTP implementation。例如

<?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');