ちょっと改良。
scanfがスペースで区切ってしまうためfgetsに変更&IDと商品名を二つのテキストに分けた
なのでIDを登録したURLと商品名を登録したURLをご用意ください(文字コードはUTF-8を指定)

内容としてはIDを1行読み込んだ時に商品名テキストから1行読み出し
連動した商品ページの商品名を変更する仕様
ブラウザにはIDと商品名を返す
商品名が長いとエラーで返ってくるため、その場合
$name = fgets($handle2, 200);の数値をいじってください。

注意点としてIDと商品名が同じ行で連動しているかを確認するのと
2000件ぐらいの処理で停止してしまうため、オーバーする場合、
区切りを確認して、その都度、IDと商品名の一覧を変更しなければなりません。

----------------------------------------------------------------------------------

<?php
$handle = fopen("<商品名ID URL>", "r");
$handle2 = fopen("<商品名テキストURL>", "r");

  function namechange($ID,$namea){
    $attributes = array("product" => array("name" => $namea));

    $request_options = array(
      'http' => array(
        'method'  => 'PUT',
        'header'=> "Authorization: Bearer <アクセストークン>\r\n" . "Content-Type: application/json\r\n",
        'content' => json_encode($attributes)
    )
  );

  $context = stream_context_create($request_options);

  $url = 'https://api.shop-pro.jp/v1/products/'.$ID.'.json';
  $response_body = file_get_contents($url, false, $context);
    echo $ID,$namea,'<br>';
  }

  while ($code = fgets($handle, 100)) {
     $name = fgets($handle2, 300);
     $name = strtok($name, "\n\0");
     $code = strtok($code, "\n\0");
     namechange($code,$name);
  }
fclose($handle);
fclose($handle2);
?>
----------------------------------------------------------------------------------

3万件を更新なう

よくよく見たらブラウザに最後に表示されたIDの次のIDまで処理されていることが多いです。
めんどくさいっていう場合はブラウザに表示された最後のIDを区切りでも何の問題もありません。

商品名変更の処理だけで2000件ぐらいなのでプラス何かだと一度の処理件数は落ちると考えられます。
あとサーバーの状態にもよりけり。
夕方だと混み合うみたいなのでさらに処理件数は落ちると考えられます。

まあ行っている方法としては
1、エクセルでIDと商品名の連動確認

2、IDを登録したURLと商品名を登録したURLにIDと商品名をそれぞれ登録
(エクセルでCtrl+Shift+↓にて選択項目以下すべてを指定してコピペ)

3、登録したそれぞれのURLの1行目がエクセルの同じ列にあるか確認

4、phpを登録したURLにアクセス(2週目以降は更新でおk)

5、表示されるまでしばしお待ちを

6、ブラウザに表示されたらエラーがないか確認

7、ブラウザに表示された最後のIDをエクセルで確認してその下のIDを選択して空白行を挿入

8、空白行以上を処理(1に戻る)

と細かく言うとこうなる。

一括処理なので行がずれたら全部ずれます。お気をつけて。

追記.このページを掲載後2時間現在、google検索にて「カラーミー PHP」で検索かけると
2ページ目に表示されていた・・・
レスポンスおかしくね?