Automatización de tareas en PHP: 10 ejemplos de código para programadores perezosos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué automatizar la rutina con PHP? O cómo hacer que la computadora trabaje por ti

\n\n

Imagina: cada mañana entras al servidor, ejecutas un backup de la base de datos, revisas los logs de errores, generas el informe del día anterior y se lo envías a tu jefe. Y luego, otra vez, y otra. ¿Aburrido? Demasiado. Y lo peor es perder el tiempo de un programador en lo que una máquina puede hacer.

\n\n

PHP no es solo para sitios web. Este lenguaje es ideal para la automatización de tareas en PHP: desde renombrar archivos hasta hacer scraping de sitios web complejos. En este artículo te mostraré 10 ejemplos reales que te ahorrarán horas de trabajo. Todos los scripts funcionan y están probados: tómalos y úsalos.

\n\n

Por cierto, si buscas soluciones listas para automatizar con PHP, has llegado al lugar indicado. ¡Allá vamos!

\n\n

1. Envío automático de email con adjunto (informe PDF)

\n\n

La petición más común de las empresas: "Haz que los informes lleguen solos". Aquí tienes un script simple que envía un correo con un archivo PDF adjunto.

\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// Uso:\nsendReportWithAttachment(\n    'jefe@empresa.com',\n    'Informe diario del ' . date('d/m/Y'),\n    'Adjunto encontrarás el informe en PDF. Detalles en el archivo.',\n    '/var/informes/informe_diario.pdf'\n);\n?>
\n\n

Cómo automatizarlo: programa este script en cron para que se ejecute una vez al día y los informes se enviarán solos.

\n\n

2. Scraping de un sitio web y guardado en CSV

\n\n

Supongamos que necesitas recopilar precios de la competencia o una lista de ofertas de trabajo. El scraping web con PHP es sencillo. Usamos cURL y 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, ['Texto', 'Enlace']);\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// Ejemplo: extraemos titulares de noticias de un sitio\nparseSiteToCSV(\n    'https://news.ycombinator.com/',\n    '//tr[@class="athing"]/td[@class="title"]/a',\n    'titulares_hacker_news.csv'\n);\n?>
\n\n

Este ejemplo de automatización de tareas con PHP se puede ejecutar cada hora para obtener datos actualizados sin hacer un solo clic.

\n\n

3. Automatización de backups de base de datos

\n\n

Nunca está de más tener una copia de seguridad automática. Este script genera un backup de MySQL y lo comprime.

\n\n
<?php\nfunction backupDatabase($host, $user, $pass, $dbName, $backupDir) {\n    $date = date('Y-m-d_H-i-s');\n    $filename = "{$backupDir}/{$dbName}_{$date}.sql.gz";\n    \n    $command = "mysqldump --host={$host} --user={$user} --password={$pass} {$dbName} | gzip > {$filename}";\n    exec($command, $output, $returnCode);\n    \n    if ($returnCode === 0) {\n        echo "Backup creado: {$filename}\\n";\n        return $filename;\n    } else {\n        echo "Error al crear el backup.\\n";\n        return false;\n    }\n}\n\n// Uso:\nbackupDatabase('localhost', 'root', 'password', 'mi_app', '/var/backups');\n?>
\n\n

Programa este script en cron para que se ejecute todas las noches y tendrás tus datos siempre seguros.

\n\n

4. Generación de informes en Excel con PhpSpreadsheet

\n\n

¿Necesitas enviar informes en formato Excel? Con la librería PhpSpreadsheet es muy fácil.

\n\n
<?php\nrequire 'vendor/autoload.php';\n\nuse PhpOffice\\PhpSpreadsheet\\Spreadsheet;\nuse PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;\n\nfunction generateExcelReport($data, $filename) {\n    $spreadsheet = new Spreadsheet();\n    $sheet = $spreadsheet->getActiveSheet();\n    \n    // Encabezados\n    $sheet->setCellValue('A1', 'Producto');\n    $sheet->setCellValue('B1', 'Precio');\n    $sheet->setCellValue('C1', 'Stock');\n    \n    // Datos\n    $row = 2;\n    foreach ($data as $item) {\n        $sheet->setCellValue("A{$row}", $item['producto']);\n        $sheet->setCellValue("B{$row}", $item['precio']);\n        $sheet->setCellValue("C{$row}", $item['stock']);\n        $row++;\n    }\n    \n    $writer = new Xlsx($spreadsheet);\n    $writer->save($filename);\n    echo "Informe Excel generado: {$filename}\\n";\n}\n\n// Ejemplo de uso:\n$productos = [\n    ['producto' => 'Laptop', 'precio' => 1200, 'stock' => 15],\n    ['producto' => 'Teclado', 'precio' => 45, 'stock' => 30],\n];\ngenerateExcelReport($productos, 'informe_productos.xlsx');\n?>
\n\n

Este script es perfecto para automatizar la generación de informes en PHP y enviarlos por correo.

\n\n

5. Renombrado masivo de archivos

\n\n

¿Tienes cientos de archivos con nombres incorrectos? Este script los renombra en segundos.

\n\n
<?php\nfunction batchRenameFiles($directory, $prefix, $extension) {\n    $files = glob("{$directory}/*.{$extension}");\n    $counter = 1;\n    \n    foreach ($files as $file) {\n        $newName = "{$directory}/{$prefix}_{$counter}.{$extension}";\n        if (rename($file, $newName)) {\n            echo "Renombrado: {$file} -> {$newName}\\n";\n            $counter++;\n        }\n    }\n}\n\n// Uso:\nbatchRenameFiles('/var/uploads', 'foto', 'jpg');\n?>
\n\n

Ideal para automatizar tareas de administración de archivos con PHP.

\n\n

6. Limpieza automática de archivos temporales

\n\n

Mantén tu servidor limpio eliminando archivos antiguos automáticamente.

\n\n
<?php\nfunction cleanOldFiles($directory, $daysOld) {\n    $files = glob("{$directory}/*");\n    $now = time();\n    \n    foreach ($files as $file) {\n        if (is_file($file)) {\n            $fileAge = $now - filemtime($file);\n            $days = $fileAge / (60 * 60 * 24);\n            \n            if ($days > $daysOld) {\n                unlink($file);\n                echo "Eliminado: {$file}\\n";\n            }\n        }\n    }\n}\n\n// Elimina archivos de más de 30 días\ncleanOldFiles('/tmp/cache', 30);\n?>
\n\n

Ejecútalo semanalmente con cron para mantener tu disco duro libre.

\n\n

7. Monitoreo de disponibilidad de sitios web

\n\n

¿Quieres saber si tu sitio web está caído? Este script te avisa por email.

\n\n
<?php\nfunction checkWebsite($url, $adminEmail) {\n    $ch = curl_init();\n    curl_setopt($ch, CURLOPT_URL, $url);\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n    curl_setopt($ch, CURLOPT_TIMEOUT, 10);\n    curl_setopt($ch, CURLOPT_NOBODY, true);\n    \n    curl_exec($ch);\n    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n    curl_close($ch);\n    \n    if ($httpCode >= 400) {\n        $subject = "ALERTA: Sitio {$url} no disponible";\n        $message = "El sitio {$url} respondió con código HTTP {$httpCode}.";\n        mail($adminEmail, $subject, $message);\n        echo "Alerta enviada a {$adminEmail}\\n";\n    } else {\n        echo "Sitio {$url} OK (código {$httpCode})\\n";\n    }\n}\n\n// Uso:\ncheckWebsite('https://tusitio.com', 'admin@tusitio.com');\n?>
\n\n

Ejecútalo cada 5 minutos desde cron y recibe alertas inmediatas si algo falla.

\n\n

8. Descarga automática de archivos desde una URL

\n\n

¿Necesitas descargar archivos regularmente? Este script lo hace por ti.

\n\n
<?php\nfunction downloadFile($url, $destination) {\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    \n    $content = curl_exec($ch);\n    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n    curl_close($ch);\n    \n    if ($httpCode === 200 && $content) {\n        file_put_contents($destination, $content);\n        echo "Archivo descargado: {$destination}\\n";\n        return true;\n    } else {\n        echo "Error al descargar {$url}\\n";\n        return false;\n    }\n}\n\n// Uso:\ndownloadFile('https://ejemplo.com/datos.csv', '/var/data/datos.csv');\n?>
\n\n

Perfecto para automatizar la descarga de archivos con PHP desde APIs o sitios externos.

\n\n

9. Procesamiento de imágenes en lote

\n\n

Redimensiona o comprime imágenes automáticamente con GD.

\n\n
<?php\nfunction resizeImages($directory, $maxWidth, $maxHeight) {\n    $images = glob("{$directory}/*.{jpg,jpeg,png,gif}", GLOB_BRACE);\n    \n    foreach ($images as $imagePath) {\n        $info = getimagesize($imagePath);\n        $width = $info[0];\n        $height = $info[1];\n        \n        if ($width > $maxWidth || $height > $maxHeight) {\n            $ratio = min($maxWidth / $width, $maxHeight / $height);\n            $newWidth = (int)($width * $ratio);\n            $newHeight = (int)($height * $ratio);\n            \n            $src = imagecreatefromstring(file_get_contents($imagePath));\n            $dst = imagecreatetruecolor($newWidth, $newHeight);\n            imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);\n            \n            imagejpeg($dst, $imagePath, 85);\n            imagedestroy($src);\n            imagedestroy($dst);\n            echo "Redimensionada: {$imagePath}\\n";\n        }\n    }\n}\n\n// Uso:\nresizeImages('/var/uploads/images', 800, 600);\n?>
\n\n

Ideal para automatizar el procesamiento de imágenes en PHP en servidores de carga.

\n\n

10. Sincronización de archivos entre servidores vía FTP

\n\n

Mantén tus servidores sincronizados automáticamente.

\n\n
<?php\nfunction syncFilesFTP($localDir, $remoteDir, $ftpServer, $ftpUser, $ftpPass) {\n    $conn = ftp_connect($ftpServer);\n    ftp_login($conn, $ftpUser, $ftpPass);\n    ftp_pasv($conn, true);\n    \n    $localFiles = glob("{$localDir}/*");\n    \n    foreach ($localFiles as $localFile) {\n        $remoteFile = $remoteDir . '/' . basename($localFile);\n        if (ftp_put($conn, $remoteFile, $localFile, FTP_BINARY)) {\n            echo "Subido: {$localFile}\\n";\n        }\n    }\n    \n    ftp_close($conn);\n    echo "Sincronización completada.\\n";\n}\n\n// Uso:\nsyncFilesFTP('/var/www/local', '/public_html', 'ftp.miservidor.com', 'usuario', 'contraseña');\n?>
\n\n

Ejecútalo cada hora para mantener tus archivos sincronizados sin esfuerzo.

\n\n

Conclusión: automatiza tu trabajo con PHP

\n\n

Estos 10 ejemplos de automatización de tareas con PHP te ayudarán a ahorrar tiempo y evitar errores humanos. Desde backups hasta scraping web, PHP es una herramienta poderosa para la automatización.

\n\n

¿Mi consejo? Empieza con un script pequeño, pruébalo bien y luego prográmalo en cron. En una semana te preguntarás cómo trabajabas antes sin automatizar.

\n\n

Si te ha gustado este artículo, compártelo con otros programadores que también merecen dejar de hacer tareas repetitivas. ¡Feliz automatización!

Blogs

Book Recommendations