1

phpcurlライブラリを使用してファイルのインデックスを作成しています。私はここでコードで立ち往生しています

echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
     $result=move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
     if ($result == 1) echo "<p>Upload done .</p>";
        $options = getopt("f:");
        $infile = $options['f'];

        $url = "http://localhost:8983/solr/update/";
        $filename = "upload/" . $_FILES["file"]["name"];
        $handle = fopen($filename, "rb");
        $contents = fread($handle, filesize($filename));
        fclose($handle);
        echo $url;
        $post_string = file_get_contents("upload/" . $_FILES["file"]["name"]);
        echo $contents;
        $header = array("Content-type:text/xml; charset=utf-8");

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLINFO_HEADER_OUT, 1);

        $data = curl_exec($ch);

        if (curl_errno($ch)) {
           print "curl_error:" . curl_error($ch);
        } else {
           curl_close($ch);
           print "curl exited okay\n";
           echo "Data returned...\n";
           echo "------------------------------------\n";
           echo $data;
           echo "------------------------------------\n";
        }

結果として何も表示されていません。さらに、ApacheSolrのイベントログには何も表示されません。コードを手伝ってください

4

3 に答える 3

1

アップロードしたファイルから読み取った$post_stringファイルの中で、そのファイルは?で終わります<commit />か?それがないと、Solrにコミットされるものは何もないので、コマンドのセットが。で終わることを確認してください<commit />

また、この方法でファイルを更新することは強くお勧めしません。誰かがあなたのパイプラインとこのファイルを実行する方法を悪意を持って理解した場合、彼らはあなたのSolrインデックスに簡単に大混乱をもたらす可能性があります。

于 2012-07-02T16:46:45.580 に答える
1

これはあなたのコードと同じように私にとってはうまくいきましたが、URLを次のように変更します

$url = "http://localhost:8983/solr/CORE_NAME/update/?commit=true";
于 2017-02-04T17:49:35.437 に答える
0

これが私にとってどのように機能するかです:

$target_url = $config['core']['solr_host'] . "/solr/update/extract?commit=true&literal.id=" . urlencode ( $page ['id'] ) . "&literal.url=" . urlencode ( rtrim(BASE_URL . $page ['path'],"/") );
$file_name_with_full_path = WEBSITE_PATH . $page ['path'];

$post = array (
   'myFile' => '@' . $file_name_with_full_path 
);

$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $target_url );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_USERPWD, "user:pass" ); // for Apache Basic Auth


$result = curl_exec ( $ch );
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ( $ch );

echo $result;
于 2015-06-05T10:33:23.050 に答える