لماذا أتمتة الروتين في PHP؟ أو كيف تجعل الكمبيوتر يعمل نيابة عنك
\n\nتخيل: كل صباح تدخل إلى السيرفر، تقوم بنسخ احتياطي لقاعدة البيانات، تفحص سجلات الأخطاء، تُنشئ تقرير الأمس وترسله إلى مديرك. ثم تعيد الكرة مرة أخرى. ممل؟ بالتأكيد. والأهم من ذلك، إنه من الغباء أن يضيع مبرمج وقته في عمل يمكن للآلة القيام به.
\n\nPHP ليست فقط لمواقع الويب. هذه اللغة ممتازة لـ أتمتة المهام في PHP: من إعادة تسمية الملفات البسيطة إلى استخراج بيانات المواقع المعقدة. في هذه المقالة، سأعرض 10 أمثلة عملية ستوفر لك ساعات من العمل. جميع السكربتات جاهزة ومختبرة – خذها واستخدمها.
\n\nبالمناسبة، إذا كنت تبحث عن حلول جاهزة لـ الأتمتة باستخدام PHP – فقد وصلت إلى المكان الصحيح. هيا بنا!
\n\n1. إرسال إيميل تلقائي مع مرفق (تقرير PDF)
\n\nالطلب الأكثر شيوعاً من الشركات: "اجعل التقارير تصل تلقائياً". أدناه سكربت بسيط يرسل بريداً إلكترونياً مع ملف PDF.
\n\n<?php\nfunction sendReportWithAttachment($to, $subject, $body, $filePath) {\n $boundary = md5(time());\n \n $headers = "MIME-Version: 1.0\\r\\n";\n $headers .= "From: report@mysite.com\\r\\n";\n $headers .= "Content-Type: multipart/mixed; boundary=\\"{$boundary}\\"\\r\\n";\n \n $message = "--{$boundary}\\r\\n";\n $message .= "Content-Type: text/plain; charset=utf-8\\r\\n\\r\\n";\n $message .= $body . "\\r\\n\\r\\n";\n \n if (file_exists($filePath)) {\n $content = file_get_contents($filePath);\n $content = chunk_split(base64_encode($content));\n $message .= "--{$boundary}\\r\\n";\n $message .= "Content-Type: application/pdf; name=\\"" . basename($filePath) . "\\"\\r\\n";\n $message .= "Content-Disposition: attachment; filename=\\"" . basename($filePath) . "\\"\\r\\n";\n $message .= "Content-Transfer-Encoding: base64\\r\\n\\r\\n";\n $message .= $content . "\\r\\n";\n }\n \n $message .= "--{$boundary}--";\n \n return mail($to, $subject, $message, $headers);\n}\n\n// الاستخدام:\nsendReportWithAttachment(\n 'boss@company.com',\n 'التقرير اليومي لـ ' . date('d.m.Y'),\n 'مرفق تقرير PDF. التفاصيل في الملف.',\n '/var/reports/daily_report.pdf'\n);\n?>\n\nكيفية الأتمتة: ضع هذا السكربت في cron ليعمل مرة يومياً – وستُرسل التقارير تلقائياً.
\n\n2. استخراج بيانات موقع وحفظها في CSV
\n\nلنفترض أنك تريد جمع أسعار المنافسين أو قائمة الوظائف الشاغرة. استخراج البيانات في PHP سهل. استخدم cURL وDOMDocument.
\n\n<?php\nfunction parseSiteToCSV($url, $cssSelector, $outputFile) {\n $ch = curl_init();\n curl_setopt($ch, CURLOPT_URL, $url);\n curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\n curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');\n \n $html = curl_exec($ch);\n curl_close($ch);\n \n if (!$html) {\n return false;\n }\n \n $dom = new DOMDocument();\n @$dom->loadHTML($html);\n $xpath = new DOMXPath($dom);\n \n $items = $xpath->query($cssSelector);\n \n $file = fopen($outputFile, 'w');\n fputcsv($file, ['النص', 'الرابط']);\n \n foreach ($items as $item) {\n $text = trim($item->textContent);\n $link = $item->getAttribute('href') ?: '—';\n fputcsv($file, [$text, $link]);\n }\n \n fclose($file);\n return true;\n}\n\n// مثال: استخراج عناوين الأخبار من موقع\nparseSiteToCSV(\n 'https://news.ycombinator.com/',\n '//tr[@class="athing"]/td[@class="title"]/a',\n 'hacker_news_titles.csv'\n);\n?>\n\nيمكن تشغيل هذا المثال لـ أتمتة المهام في PHP كل ساعة – وستحصل على بيانات جديدة دون أي نقرة.
\n\n