0

Base64 でエンコードされた画像をデータベースから取り出してファイルに書き込む、次の PHP スクリプトを作成しました。また、各行にシリアル、メイン画像、メイン更新日、追加画像、追加画像更新日が含まれる CSV も出力します。

<?php
date_default_timezone_set('America/Edmonton');

$serverName = "database";
$connectionInfo = array( "Database"=>"CRM_MSCRM");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn === false )
    {
        echo "Unable to connect.\n\n";
        die( print_r( sqlsrv_errors(), true));
    }
else
    {
        echo "Connected. Selecting trucks...\n\n";
    }

$tsql = "SELECT * FROM CRM_MSCRM.dbo.Trader_Export_Simple";
$stmt = sqlsrv_query( $conn, $tsql);

if( $stmt === false )
    {
        echo "Error executing query.\n\n";
        die( print_r( sqlsrv_errors(), true));
    }

$csvData = array();

while ($row = sqlsrv_fetch_array($stmt))
    {
        $count = 1;
        $mainpicsql = "SELECT * FROM CRM_MSCRM.dbo.TruckImages WHERE Serial = '".$row[0]."' AND MainPic = 1";
        $mainpicstmt = sqlsrv_query( $conn, $mainpicsql);
        while ($mainpicrow = sqlsrv_fetch_array($mainpicstmt))
            {
                $truck = $mainpicrow[1];
                $mainfilename = $truck ."-". $count . ".png";
                file_put_contents($mainfilename, base64_decode($mainpicrow[0]));
                $mainpicdate = $mainpicrow[3]->format("d/m/Y h:m:s");
                $mainfilename = "http://images.website/images/".$mainfilename;
                echo $mainpicdate."\n";
            }

        $picsql = "SELECT * FROM CRM_MSCRM.dbo.TruckImages WHERE Serial = '".$row[0]."' AND MainPic = 0";
        $picstmt = sqlsrv_query( $conn, $picsql);
        $extrapicsdate = "";
        $filenames = "";

        while ($picrow = sqlsrv_fetch_array($picstmt))
            {
                $count++;
                $filename = $picrow[1] ."-". $count . ".png";
                file_put_contents($filename, base64_decode($picrow[0]));
                $picdate = $picrow[3]->format("d/m/Y h:m:s");
                $filenames .= "http://images.website/images/".$filename.";";
                $extrapicsdate .= $picdate.";";
            }

        $filenames = rtrim($filenames, ";");
        $extrapicsdate = rtrim($extrapicsdate, ";");
        echo $filenames."\n";
        echo $extrapicsdate."\n";
        if ($truck != "") {
            $csvData[] = array($truck, $mainfilename, $mainpicdate, $filenames, $extrapicsdate);
        }

        if ($filenames != "")
            {
                $filenames = "";
            }        
        if ($extrapicsdate != "")
            {
                $extrapicsdate = "";
            }

        echo "Next truck...\n\n";
        $truck = "";
        $mainfilename = "";
        $mainpicdate = "";
    }
    $fp = fopen('file.csv', 'w');
    foreach ($csvData as $fields) {
        fputcsv($fp, $fields);
    }
    //print_r($csvData);
sqlsrv_free_stmt( $stmt);
sqlsrv_free_stmt( $picstmt);
sqlsrv_close( $conn);
?>

このファイルの各行から $truck を取得し、別の CSV でその $truck を含む行を検索し、この CSV の一致する行の列をその行に追加したいと思います。この CSV ファイルのすべての行について、すすぎと繰り返しを行います

数年間 PHP を使用しなかった後、この作業を行うのにしばらく費やしたので、頭が少し痛いです。誰かが私をこの部分の正しい一般的な方向に向けたいですか?? 助けてくれてありがとう!

4

0 に答える 0