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,
];
}
}
基本上很少會在seed上引用 excel 的資料來做匯入。
畢竟seed的用意在於初始化資料用居多。
實在不該再來處理轉換資料這件事才對。
當然,這不是你本篇主題的問題。
你可以先在你的引入程式
加一段 dump($model) 看看是否有正確拿到資料否。
畢竟如果轉換不到資料,它也不會報錯沒錯。
記得ENV的DEBUG模式先打開。
搞不好有出錯只是沒顯示。
但一般還是會建議使用 json 之類的資料做導入處理。
盡量不要再做轉換資料的動作。
我連seeders是什麼都不知道
替你問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);
日誌檢查:
查看 cPanel 的錯誤日誌文件,可能會發現一些未顯示的錯誤信息。
執行時間限制:
如果匯入操作需要較長時間,可能會超出 PHP 的最大執行時間限制。嘗試在程式碼中增加執行時間限制:
set_time_limit(300); // 設置為 5 分鐘
記憶體限制:
檢查是否有足夠的記憶體分配給 PHP 進程。可以嘗試增加記憶體限制:
ini_set('memory_limit', '256M');
依賴項檢查:
確保所有必要的 PHP 擴展在 cPanel 環境中都已啟用。
代碼兼容性:
檢查代碼中是否使用了任何可能在 cPanel 環境中不兼容的函數或特性。
手動執行:
嘗試通過 SSH 連接到伺服器,手動執行 seeder,看看是否能獲得更多信息。
建議您逐步檢查這些可能的問題點。如果仍然無法解決,可能需要與 cPanel 主機提供商聯繫,尋求進一步的協助。他們可能會有更多關於伺服器特定配置的信息,這些信息可能影響到您的 seeder 執行。