我正在使用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.xml
和ssh2.sftp://ResourceID#150/Product/Product.xml
所以我的问题是为什么这两个进程互相干扰,如何修复它们以便它们可以同时运行?
答案 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');