گزینه max_execution_time محدود کننده زمانی هست که اگر اجرای اسکریپت های PHP بیش از زمان مورد نظر طول بکشه، پروسس رو کیل میکنه و یه پیام خطا نمایش میده
بهترین حالت این هست که سورس کدت رو بگردی و ببینی چرا اجرای کدت بیش از ۶۰ ثانیه طول میکشه و کد رو بهینه کنی...
اما اگر به هر دلیلی نتونسی کد رو بهینه کنی..
میتونی با زیاد کردن مقدار max_execution_time مشکل رو برطرف کنی..
به صورت Global میتونی توی php.ini این مقدار رو تغییر بدی
و با تابع ini_set هم میتونی اینکارو انجام بدی
سلام
اول اینکه ظاهرا شما داری یه فایل حجیم آپلود میکنی که پیشنهاد میشه برای آپلود اینگونه فایل ها از stream استفاده کنی و فایل را slice کنین تا خطا نگیرین
و مورد بعدی اینکه توی فایل php.ini باید زمان max_execution_time را زیاد کنین
سلام
کل فایل کد من این هستش
من از طریق ckeditor یک محتوایی رو ایجاد میکنم و اونو در دیتابیس ذخیره میکنم و بعد تبدیلش میکنم به pdf
<?php
namespace App\Http\Controllers;
use App\Models\Html;
use Illuminate\Http\Request;
use niklasravnsborg\LaravelPdf\Facades\Pdf;
class HtmlController extends Controller
{
public function create()
{
return view('pdf');
}
public function store(Request $request)
{set_time_limit(0);
$request->validate([
'htmlFile' => 'required'
]);
$html = Html::create([
'htmlFile' => $request->htmlFile
]);
$pdf = PDF::loadHTML($html->htmlFile);
$pdf->stream();
return redirect()->back();
}
public function upload(Request $request)
{
//handle the user upload of avatar
$file=$request->upload;
$fileName=$file->getClientOriginalExtension();
$new_name=time().$fileName;
$dir="storage/uploads/";
$file->move($dir,$new_name);
$url=asset('storage/uploads/'.$new_name);
$CKEditorFuncNum = $request->input('CKEditorFuncNum');
$msg = 'Image uploaded successfully';
$response = "<script>window.parent.CKEDITOR.tools.callFunction('$CKEditorFuncNum', '$url', '$msg')</script>";
echo $response;
}
}
خیلی ممنون میشم راهنماییم کنید که چطور میتونم به sliceتبدیل کنم این کد رو و اینکه اصلا چرا انقدر طول میکشه
کلاس PDF ک استفاده کردی چی هست ؟؟؟؟؟؟
ببین چون داری متن را pdf میکنی پیشنهادم اینه از پکیج niklasravnsborg/laravel-pdf استفاده کنی که خیلی استاندارده
ممکن هست متنی که داری pdf میکنی چون فارسی هست کاراکترهای DOM زیاد داره و ظاهرا کلاس pdf که داری استفاده میکنی نمیتونه هندلش کنه و برای همین خطای time میده بهت
اون بحث slice که گفتم بهت فکر کردم داری فایل آپلود میکنی
فونت های فارسی را توی کانفیگ پکیج ست کردی ؟؟؟؟؟؟؟؟
<?php
if (!defined('_MPDF_PATH')) define('_MPDF_PATH','mpdf/');
return [
'mode' => 'utf-8',
'tempDir' => base_path('../temp/'),
'font_path' => base_path('resources/farsi-fonts'),
'font_data' => [
'fa' => [
'R' => 'iran-yekan-400.ttf',
'useOTL' => 0xFF,
'useKashida' => 75,
],
'en' => [
'R' => 'Gothic/Century Gothic.ttf',
'B' => 'Gothic/GOTHICB.ttf',
]
]
];
این کدهای قسمت کانفیگ pdf هست که من زدم
اگر نزدی بگو تا کاملشو بدم
<?php
return [
'mode' => 'utf-8',
'format' => 'A4',
'default_font' => 'vazir',
'author' => '',
'subject' => '',
'keywords' => '',
'creator' => 'Laravel Pdf',
'display_mode' => 'fullpage',
'tempDir' => base_path('public\temp\\'),
'pdf_a' => false,
'pdf_a_auto' => false,
'icc_profile_path' => '',
'font_path' => base_path('public/fonts/Vazir-Bold.ttf'),
];
این کدهای منه
خب کدهای کانفیگ pdf را دقیقا کدهای منو بزار و مسیر فونتهاشو درست کن فقط
2 مورد هم بگم بهت
اول اینکه ممکنه فونت Vazir که داری استفاده میکنی استاندارد TTF نداشته باشه و پیشنهاد میکنم از فونت ایران یکان یا b nazanin استفاده کنی اگر مشکلی داشتی
دومین مورد اینکه format و غیره را هنگام خروجی استفاده کن
این کد من توی کنترلرم هست موقع خروجی گرفتن
$rowCount = $invoice_pdf->count();
if ($rowCount <= 2) {
$paper = 'A5-L';
} else {
$paper = 'A4';
}
$pdf_type = $type;
$sign_type = $sign;
$pdf = new PdfWrapper();
$pdf->loadView('dashboard.admin.invoice.pdf', compact('invoice', 'sign_type', 'invoice_pdf', 'pdf_type', 'name_type', 'numToWord'),
[],
[
'mode' => 'utf-8',
'format' => $paper,
'display_mode' => 'fullpage',
'margin_left' => 5,
'margin_right' => 5,
'margin_top' => 5,
'margin_bottom' => 5,
])->download("factor_" . $paper . '_' . Verta::format('Y-m-d_H:i:s') . ".pdf");
ببین کانفیگمو همینجا نوشتم و گفتم مثلا اگر ردیف های فاکتورم بیشتر از 2 تا بود سایز A4 بده و اگر کمتر مساوی بود A5-L بده
خلاصه دیگه ریزه کاری کانفیگ دست خودته
مهم کد کانفیگ pdf منه که کاملا فارسی را ساپورت میکنه
بزن حالشو ببر
@yk5742g🌺☘️
خیلی خیلی ممنونم ک کدهایی که واسش زحمت کشیدین رو در اختیار من گذاشتین
من کدهای شما رو جایگزین کردم
اما باز هم مشکل قبل رو دارم
زمانیکه متن می نویسم pdfرا حت و سریع برام دانلود میشه
اما وقتی عکس آپلود میکنم ارور زمان میده
در حالیکه من این مقدار رو set_time_limit(0); در کد ست کردم
@a.ghaderi1375
سلام
فکر کنم شما عکس را به صورت آدرس کامل داری میدی بهش
ببین اینجوری عکسو نده
http://localhost/images/picName.jpg
باید اینجوری باشه عکست
images/picName.jpg
وقتی آدرس کامل میدی یا با Asset میدی آدرسو نمیتونه لود کنه
برای استفاده عکس توی pdf باید آدرس عکس به صورت local باشه
ببین من خودمم توی فایل pdf عکس استفاده کردم.
زیر فاکتورها مهر و امضای شرکت
اینجوری نوشتم آدرسو
@if($sign_type == '1')
<img style=" height: 150px" src="images/sign.png">
@else
مهر و امضاء فروشنده
@endif
من اینطوری بهش مسیر دادم
کدش این هست
public function upload(Request $request)
{
//handle the user upload of avatar
$file=$request->upload;
$fileName=$file->getClientOriginalExtension();
$new_name=time().$fileName;
$dir="storage/uploads/";
$file->move($dir,$new_name);
$url=asset('storage/uploads/'.$new_name);
dd($url);
$CKEditorFuncNum = $request->input('CKEditorFuncNum');
$msg = 'Image uploaded successfully';
$response = "<script>window.parent.CKEDITOR.tools.callFunction('$CKEditorFuncNum', '$url', '$msg')</script>";
echo $response;
}
استباهه خب مسیر دادنت
باید بدون آدرس اولیه سایتت باشه
اینجوری
storage/uploads/45454545.png
بعدشم خانم سوتی دادی 🤣🤣🤣🤣
تو آدرس فایلت اسم فایلتو ببین
پسوند عکس نقطه نداره و پسوند چسبیده به اسم
@a.ghaderi1375
خب حالا کدهای بخش آپلود تصاویر ckeditor که نوشتی در کنترلر را بزار و کدهای js config مربوط به Ckeditor در خود blade هم بزار تا ببینمشون
<script src="/vendor/unisharp/laravel-ckeditor/ckeditor.js"></script>
<script>CKEDITOR.replace('htmlFile', {
filebrowserUploadUrl: "{{route('admin.pdf.upload', ['_token' => csrf_token() ])}}",
filebrowserUploadMethod: 'form',
language : 'en',
uiColor : '#f1ebf6',
height:450,
toolbarCanCollapse : true,
fullPage: true,
allowedContent: true,
extraPlugins: "justify,font,colorbutton,docprops",
});
</script>
کل کدهاش همین هاست
Route::post('pdf/upload', [ \App\Http\Controllers\HtmlController::class,'upload'])->name('pdf.upload');
خدایاااااااااااااااااااااااااااا
کد های متد upload توی HtmlController را بزار 😂😂😂😂 من چقد حرص بخورم
public function upload(Request $request)
{
//handle the user upload of avatar
$file=$request->upload;
$fileName=$file->getClientOriginalExtension();
$new_name=time().$fileName;
$dir="storage/uploads/";
$file->move($dir,$new_name);
$url=asset('storage/uploads/'.$new_name);
dd($url);
$CKEditorFuncNum = $request->input('CKEditorFuncNum');
$msg = 'Image uploaded successfully';
$response = "<script>window.parent.CKEDITOR.tools.callFunction('$CKEditorFuncNum', '$url', '$msg')</script>";
echo $response;
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟