iT邦幫忙

0

Laravel excel 在 cpanel 無法使用

  • 分享至 

  • xImage

laravel 10
php 8.2
cpanel 110.0.39

我在 seeder 寫了匯入功能,在我的 Windows11, vmware Ubuntu 2204 都正常。但伺服器主機使用 cpanel,卻無反應,而且沒有任何錯誤訊息。

database\seeders\DatabaseSeeder.php

$this->call([

    TimezoneCsvSeeder::class,

    // UserSeeder::class,
    ManagerSeeder::class,
    MemberSeeder::class,
    CountryXlsxSeeder::class,
    LanguageSeeder::class,
    TranslationSeeder::class,
    ...
 

database\seeders\CountryXlsxSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Schema;
use App\Models\MasterData\Country;
use Maatwebsite\Excel\Facades\Excel;

class CountryXlsxSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Schema::disableForeignKeyConstraints();
        
        Country::truncate();

        $filename = 'database/sheets/ImportSheets/countries.xlsx';

        if (is_file($filename)) {
            echo "doing CountryImport";
            Excel::import(new \Database\Sheets\ImportClasses\CountryImport, $filename);
        }else{
            echo $filename . ' file not exists';exit;
        }

        Schema::enableForeignKeyConstraints();
    }
}

執行
$ ea-php82 artisan db:seed --class=CountryXlsxSeeder
...

INFO Seeding database.

doing CountryImport

$_

為什麼要用 ea-php82,因為這是多版本 php 的 cpanel。

database\sheets\ImportClasses\CountryImport.php

<?php

namespace Database\Sheets\ImportClasses;

use App\Models\MasterData\Country;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithStartRow;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class CountryImport implements ToModel,WithStartRow,WithMultipleSheets,WithHeadingRow
{
    public function model(array $row)
    {
        $model = new Country([
            'code'  => $row['code'],
            'name'  => $row['name'],
            'native_name'  => $row['native_name'],
            'iso_code_3'  => $row['iso_code_3'],
        ]);

        return $model;
    }

    public function startRow(): int
    {
        return 2;
    }

    public function sheets(): array
    {
        return [
            'countries' => $this,
        ];
    }
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0

基本上很少會在seed上引用 excel 的資料來做匯入。
畢竟seed的用意在於初始化資料用居多。
實在不該再來處理轉換資料這件事才對。

當然,這不是你本篇主題的問題。
你可以先在你的引入程式
加一段 dump($model) 看看是否有正確拿到資料否。
畢竟如果轉換不到資料,它也不會報錯沒錯。

記得ENV的DEBUG模式先打開。
搞不好有出錯只是沒顯示。

但一般還是會建議使用 json 之類的資料做導入處理。
盡量不要再做轉換資料的動作。

ronrun iT邦新手 4 級 ‧ 2024-08-30 09:09:13 檢舉

不懂你的點。excel就是做seeders的事。excel結構化匯入,整理方便。
debug有開,其它錯誤會顯示。
CountryImport 做 dd($model) 結果一樣,沒進到這裡。

0
海綿寶寶
iT邦大神 1 級 ‧ 2024-09-01 15:54:10

我連seeders是什麼都不知道
/images/emoticon/emoticon25.gif

替你問Claude

這種情況確實令人困惑。既然程式在您的 Windows 11 和 VMware Ubuntu 22.04 環境中都正常運作,但在使用 cPanel 的伺服器上卻無反應,我們需要進行一些排查。以下是一些可能的原因和建議的解決步驟:

1. PHP 版本差異:
   確認 cPanel 伺服器上的 PHP 版本與您的開發環境是否一致。某些函數或特性可能在較舊的 PHP 版本中不可用。

2. 權限問題:
   檢查 seeder 檔案和相關目錄的權限是否正確設置。cPanel 環境可能有更嚴格的權限設置。

3. 資料庫連接:
   確保 cPanel 環境中的資料庫連接設置正確。檢查資料庫名稱、使用者名稱和密碼是否正確。

4. 錯誤報告設置:
   在 cPanel 的 PHP 設置中啟用錯誤報告。可以通過修改 php.ini 文件或在程式碼中添加以下行:

   ```php
   ini_set('display_errors', 1);
   error_reporting(E_ALL);
  1. 日誌檢查:
    查看 cPanel 的錯誤日誌文件,可能會發現一些未顯示的錯誤信息。

  2. 執行時間限制:
    如果匯入操作需要較長時間,可能會超出 PHP 的最大執行時間限制。嘗試在程式碼中增加執行時間限制:

    set_time_limit(300); // 設置為 5 分鐘
    
  3. 記憶體限制:
    檢查是否有足夠的記憶體分配給 PHP 進程。可以嘗試增加記憶體限制:

    ini_set('memory_limit', '256M');
    
  4. 依賴項檢查:
    確保所有必要的 PHP 擴展在 cPanel 環境中都已啟用。

  5. 代碼兼容性:
    檢查代碼中是否使用了任何可能在 cPanel 環境中不兼容的函數或特性。

  6. 手動執行:
    嘗試通過 SSH 連接到伺服器,手動執行 seeder,看看是否能獲得更多信息。

建議您逐步檢查這些可能的問題點。如果仍然無法解決,可能需要與 cPanel 主機提供商聯繫,尋求進一步的協助。他們可能會有更多關於伺服器特定配置的信息,這些信息可能影響到您的 seeder 執行。

我要發表回答

立即登入回答