2

PECL ssh2 モジュールを使用して XML データを sftp サーバーに出力しています。異なるデータを収集し、出力を stfp サーバー上の異なるファイルに送信する 2 つの完全に別個の PHP スクリプトがあります。

顧客の輸出:

$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

だから私の質問は、なぜこれら2つのプロセスが互いに干渉しているのか、そして両方を同時に実行できるように修正するにはどうすればよいのですか?

4

1 に答える 1

0

つまり、それらは 2 つの異なるスクリプトですか? それは変だ。代わりに、純粋な PHP SFTP 実装である phpseclib を試してみてください。例えば。

<?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 に答える