<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Md.ismail</title>
    <description>The latest articles on DEV Community by Md.ismail (@mdismail_e830c2c4f43ae37).</description>
    <link>https://dev.to/mdismail_e830c2c4f43ae37</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2123549%2F2181d5f5-c57c-4a66-b4bf-1d6c1c296c3b.png</url>
      <title>DEV Community: Md.ismail</title>
      <link>https://dev.to/mdismail_e830c2c4f43ae37</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mdismail_e830c2c4f43ae37"/>
    <language>en</language>
    <item>
      <title>What I Learned About Enterprise WordPress Security</title>
      <dc:creator>Md.ismail</dc:creator>
      <pubDate>Wed, 11 Mar 2026 04:44:16 +0000</pubDate>
      <link>https://dev.to/mdismail_e830c2c4f43ae37/what-i-learned-about-enterprise-wordpress-security-1n4l</link>
      <guid>https://dev.to/mdismail_e830c2c4f43ae37/what-i-learned-about-enterprise-wordpress-security-1n4l</guid>
      <description>&lt;h1&gt;
  
  
  Security in WordPress Is Mostly About the Ecosystem
&lt;/h1&gt;

&lt;p&gt;One of the most important realizations is that &lt;strong&gt;WordPress core itself is rarely the problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most real-world compromises come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vulnerable plugins&lt;/li&gt;
&lt;li&gt;poorly written themes&lt;/li&gt;
&lt;li&gt;outdated dependencies&lt;/li&gt;
&lt;li&gt;insecure configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform itself has a strong security process, but the &lt;strong&gt;plugin ecosystem dramatically increases the attack surface&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For anyone building plugins or reviewing code, this is an important perspective.&lt;/p&gt;




&lt;h1&gt;
  
  
  Understanding the Attacker Mindset
&lt;/h1&gt;

&lt;p&gt;A lot of WordPress security issues map directly to common web vulnerabilities.&lt;/p&gt;

&lt;p&gt;Some of the most relevant ones include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-Site Scripting (XSS)&lt;/li&gt;
&lt;li&gt;SQL Injection&lt;/li&gt;
&lt;li&gt;Broken Access Control&lt;/li&gt;
&lt;li&gt;Security Misconfiguration&lt;/li&gt;
&lt;li&gt;Vulnerable and outdated components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learning these patterns helps you recognize vulnerabilities faster when reviewing code.&lt;/p&gt;




&lt;h1&gt;
  
  
  XSS Is Still One of the Most Common Issues
&lt;/h1&gt;

&lt;p&gt;Cross-Site Scripting appears frequently in WordPress plugins.&lt;/p&gt;

&lt;p&gt;It typically happens when user input is displayed without proper escaping.&lt;/p&gt;

&lt;p&gt;Example of a risky pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this value is not escaped, an attacker could inject JavaScript.&lt;/p&gt;

&lt;p&gt;WordPress provides helper functions specifically to prevent this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;esc_html&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;esc_attr&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;sanitize_text_field&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;wp_kses&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simple rule that helps a lot:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sanitize input and escape output.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  SQL Injection Is Preventable With Proper APIs
&lt;/h1&gt;

&lt;p&gt;Another common vulnerability is SQL injection.&lt;/p&gt;

&lt;p&gt;This usually happens when raw user input is placed inside SQL queries.&lt;/p&gt;

&lt;p&gt;Example of unsafe code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SELECT * FROM users WHERE id=&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WordPress provides a safe alternative using prepared statements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$wpdb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the built-in database APIs significantly reduces this risk.&lt;/p&gt;




&lt;h1&gt;
  
  
  Access Control Is Easy to Get Wrong
&lt;/h1&gt;

&lt;p&gt;Many vulnerabilities are not technical bugs but &lt;strong&gt;logic problems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users accessing actions they shouldn't&lt;/li&gt;
&lt;li&gt;contributors performing admin actions&lt;/li&gt;
&lt;li&gt;privilege escalation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WordPress solves this using &lt;strong&gt;roles and capabilities&lt;/strong&gt;, but developers must check permissions correctly.&lt;/p&gt;

&lt;p&gt;A useful concept here is the &lt;strong&gt;principle of least privilege&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Users should only have the permissions that they actually need.&lt;/p&gt;




&lt;h1&gt;
  
  
  Configuration Is Part of Security
&lt;/h1&gt;

&lt;p&gt;Even well-written code can become vulnerable if the environment is misconfigured.&lt;/p&gt;

&lt;p&gt;Some common areas that need attention include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;protecting &lt;code&gt;wp-config.php&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;using secure file permissions&lt;/li&gt;
&lt;li&gt;disabling unnecessary features&lt;/li&gt;
&lt;li&gt;enforcing HTTPS&lt;/li&gt;
&lt;li&gt;restricting server access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security is not just about code — it also depends heavily on &lt;strong&gt;infrastructure and deployment practices&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Outdated Components Are a Major Risk
&lt;/h1&gt;

&lt;p&gt;A large number of compromises happen simply because software is outdated.&lt;/p&gt;

&lt;p&gt;Plugins and themes introduce additional code and dependencies, which means more potential vulnerabilities.&lt;/p&gt;

&lt;p&gt;Good practices include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;removing unused plugins&lt;/li&gt;
&lt;li&gt;updating dependencies regularly&lt;/li&gt;
&lt;li&gt;monitoring vulnerability disclosures&lt;/li&gt;
&lt;li&gt;reviewing third-party code before using it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping the environment clean and updated reduces a large part of the attack surface.&lt;/p&gt;




&lt;h1&gt;
  
  
  Server-Side Request Forgery (SSRF) Is Often Overlooked
&lt;/h1&gt;

&lt;p&gt;Another interesting vulnerability is &lt;strong&gt;Server-Side Request Forgery&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This occurs when an application allows users to control URLs that the server fetches.&lt;/p&gt;

&lt;p&gt;Example pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;site.com/fetch?url=http://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not validated properly, attackers might be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;access internal services&lt;/li&gt;
&lt;li&gt;interact with cloud metadata endpoints&lt;/li&gt;
&lt;li&gt;retrieve sensitive data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Validating URLs and restricting outbound requests can help prevent this.&lt;/p&gt;




&lt;h1&gt;
  
  
  Monitoring and Logging Are Essential
&lt;/h1&gt;

&lt;p&gt;Security does not end after deployment.&lt;/p&gt;

&lt;p&gt;Monitoring activity is critical for detecting issues early.&lt;/p&gt;

&lt;p&gt;Useful things to log include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;login attempts&lt;/li&gt;
&lt;li&gt;admin actions&lt;/li&gt;
&lt;li&gt;API requests&lt;/li&gt;
&lt;li&gt;server events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Logs are often the only way to understand what happened during a security incident.&lt;/p&gt;




&lt;h1&gt;
  
  
  Security Is Also About Recovery
&lt;/h1&gt;

&lt;p&gt;Another important takeaway is that &lt;strong&gt;incidents will eventually happen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is not only prevention but also &lt;strong&gt;fast recovery&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Some practices that help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;regular backups&lt;/li&gt;
&lt;li&gt;incident response plans&lt;/li&gt;
&lt;li&gt;recovery testing&lt;/li&gt;
&lt;li&gt;clear monitoring alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Preparation makes a big difference when something goes wrong.&lt;/p&gt;




&lt;h1&gt;
  
  
  Key Takeaways
&lt;/h1&gt;

&lt;p&gt;Some of the most important lessons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Most WordPress vulnerabilities come from plugins and configuration issues.&lt;/li&gt;
&lt;li&gt;Secure coding practices prevent many common attacks.&lt;/li&gt;
&lt;li&gt;Proper permission checks are critical.&lt;/li&gt;
&lt;li&gt;Keeping software updated reduces risk significantly.&lt;/li&gt;
&lt;li&gt;Monitoring and logging help detect problems early.&lt;/li&gt;
&lt;li&gt;Recovery planning is just as important as prevention.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Security in WordPress is not just about a single tool or plugin.&lt;/p&gt;

&lt;p&gt;It is about &lt;strong&gt;combining good coding practices, proper configuration, continuous monitoring, and careful dependency management&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>security</category>
      <category>infosec</category>
      <category>wordfence</category>
    </item>
    <item>
      <title># Uptime Kuma: The Ultimate Self-Hosted Uptime Monitoring Tool</title>
      <dc:creator>Md.ismail</dc:creator>
      <pubDate>Sun, 18 May 2025 03:47:54 +0000</pubDate>
      <link>https://dev.to/mdismail_e830c2c4f43ae37/-uptime-kuma-the-ultimate-self-hosted-uptime-monitoring-tool-1pnj</link>
      <guid>https://dev.to/mdismail_e830c2c4f43ae37/-uptime-kuma-the-ultimate-self-hosted-uptime-monitoring-tool-1pnj</guid>
      <description>&lt;h1&gt;
  
  
  Uptime Kuma: The Ultimate Self-Hosted Uptime Monitoring Tool
&lt;/h1&gt;

&lt;p&gt;Uptime Kuma is a powerful, open-source, self-hosted uptime monitoring tool. With its modern UI, extensive feature set, and the ability to run on your own server, it's a great alternative to SaaS tools like UptimeRobot, Better Uptime, and Pingdom.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What is Uptime Kuma?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Uptime Kuma&lt;/strong&gt; is a self-hosted monitoring tool that lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track website and service uptime/downtime&lt;/li&gt;
&lt;li&gt;Receive instant alerts through 78+ notification integrations&lt;/li&gt;
&lt;li&gt;Share public status pages&lt;/li&gt;
&lt;li&gt;Monitor internal and external services&lt;/li&gt;
&lt;li&gt;Retain full control over your data (no third-party involvement)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔧 Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Monitoring Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTTP(s) (with keyword or JSON response checks)&lt;/li&gt;
&lt;li&gt;TCP Ports&lt;/li&gt;
&lt;li&gt;Ping (ICMP)&lt;/li&gt;
&lt;li&gt;DNS Records&lt;/li&gt;
&lt;li&gt;Push Monitoring (via unique URLs)&lt;/li&gt;
&lt;li&gt;Steam Game Servers&lt;/li&gt;
&lt;li&gt;Docker Container Health Checks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 Dashboards and UI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Live status overview&lt;/li&gt;
&lt;li&gt;Uptime percentages&lt;/li&gt;
&lt;li&gt;Historical response time charts&lt;/li&gt;
&lt;li&gt;SSL info &amp;amp; expiration warnings&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;li&gt;Two-Factor Authentication (2FA)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔔 Notifications &amp;amp; Alerts
&lt;/h3&gt;

&lt;p&gt;Supports over &lt;strong&gt;78 services&lt;/strong&gt; via &lt;a href="https://github.com/caronc/apprise" rel="noopener noreferrer"&gt;Apprise&lt;/a&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email (SMTP)&lt;/li&gt;
&lt;li&gt;Telegram&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;Gotify&lt;/li&gt;
&lt;li&gt;Microsoft Teams&lt;/li&gt;
&lt;li&gt;AWS SNS&lt;/li&gt;
&lt;li&gt;Webhooks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📢 Public Status Pages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Share status with clients or stakeholders&lt;/li&gt;
&lt;li&gt;Multiple pages with custom domains&lt;/li&gt;
&lt;li&gt;Password-protection optional&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📈 Metrics &amp;amp; API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prometheus-compatible &lt;code&gt;/metrics&lt;/code&gt; endpoint&lt;/li&gt;
&lt;li&gt;WebSocket/GraphQL API (unofficial)&lt;/li&gt;
&lt;li&gt;Environment variable configuration&lt;/li&gt;
&lt;li&gt;Cloudflare Tunnel (secure remote access)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔐 Security &amp;amp; Customization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Local user accounts&lt;/li&gt;
&lt;li&gt;2FA support&lt;/li&gt;
&lt;li&gt;Proxy support&lt;/li&gt;
&lt;li&gt;Frame embedding support (optional)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧰 Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  👨‍💻 Developers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor staging and production environments&lt;/li&gt;
&lt;li&gt;Catch deployment issues with push monitors&lt;/li&gt;
&lt;li&gt;Integrate with CI/CD tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧑‍🔬 System Administrators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor internal services (NAS, DB, mail servers)&lt;/li&gt;
&lt;li&gt;Get alerts before issues affect users&lt;/li&gt;
&lt;li&gt;Use Docker or bare-metal deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏠 Home Lab Enthusiasts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor self-hosted services and smart devices&lt;/li&gt;
&lt;li&gt;Track SSL cert expirations&lt;/li&gt;
&lt;li&gt;Run on Raspberry Pi or low-resource VPS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏢 Small Businesses
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor public websites and apps affordably&lt;/li&gt;
&lt;li&gt;Share public status pages&lt;/li&gt;
&lt;li&gt;Avoid vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏢 Enterprises
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor services not exposed to public internet&lt;/li&gt;
&lt;li&gt;Integrate with existing internal tools&lt;/li&gt;
&lt;li&gt;Use Prometheus/Grafana for central metrics&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Self-Hosting &amp;amp; Deployment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Docker (Recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always &lt;span class="se"&gt;\\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 3001:3001 &lt;span class="se"&gt;\\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; uptime-kuma:/app/data &lt;span class="se"&gt;\\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; uptime-kuma louislam/uptime-kuma:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Manual (Node.js + npm)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/louislam/uptime-kuma.git
&lt;span class="nb"&gt;cd &lt;/span&gt;uptime-kuma
npm run setup
node server/server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Backup &amp;amp; Persistence
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use volume mounts or set &lt;code&gt;DATA_DIR&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Backup &lt;code&gt;kuma.db&lt;/code&gt; (SQLite file)&lt;/li&gt;
&lt;li&gt;Optionally use &lt;a href="https://litestream.io/" rel="noopener noreferrer"&gt;Litestream&lt;/a&gt; to sync to S3&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reverse Proxy &amp;amp; SSL
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Run behind NGINX or Traefik&lt;/li&gt;
&lt;li&gt;Use Let's Encrypt for SSL&lt;/li&gt;
&lt;li&gt;Configure &lt;code&gt;SSL_CERT&lt;/code&gt; and &lt;code&gt;SSL_KEY&lt;/code&gt; env variables&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 Feature Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Uptime Kuma&lt;/th&gt;
&lt;th&gt;UptimeRobot (Free)&lt;/th&gt;
&lt;th&gt;Better Uptime (Free)&lt;/th&gt;
&lt;th&gt;Pingdom (Paid)&lt;/th&gt;
&lt;th&gt;StatusCake (Free)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Self-hosted&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;td&gt;SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitors&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;50 @ 5 min&lt;/td&gt;
&lt;td&gt;10 @ 3 min&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;10 @ 5 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Min Check Interval&lt;/td&gt;
&lt;td&gt;20 sec&lt;/td&gt;
&lt;td&gt;5 min&lt;/td&gt;
&lt;td&gt;30 sec (Paid)&lt;/td&gt;
&lt;td&gt;1 min&lt;/td&gt;
&lt;td&gt;1 min (Paid)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alert Channels&lt;/td&gt;
&lt;td&gt;78+ (Apprise)&lt;/td&gt;
&lt;td&gt;Email, SMS, Slack&lt;/td&gt;
&lt;td&gt;Email, Call, Slack&lt;/td&gt;
&lt;td&gt;Email, Webhook&lt;/td&gt;
&lt;td&gt;Email, Slack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public Status Pages&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global Checks&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSL Monitoring&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transaction Checks&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  💡 Tips for Production Use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set up SSL &amp;amp; 2FA for security&lt;/li&gt;
&lt;li&gt;Backup &lt;code&gt;kuma.db&lt;/code&gt; or use Litestream for auto backups&lt;/li&gt;
&lt;li&gt;Use Docker + &lt;code&gt;--restart=always&lt;/code&gt; for reliability&lt;/li&gt;
&lt;li&gt;Restrict access to the dashboard (e.g. VPN, IP allowlist)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Useful Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/louislam/uptime-kuma" rel="noopener noreferrer"&gt;https://github.com/louislam/uptime-kuma&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;DockerHub: &lt;a href="https://hub.docker.com/r/louislam/uptime-kuma" rel="noopener noreferrer"&gt;https://hub.docker.com/r/louislam/uptime-kuma&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Apprise Notification Library: &lt;a href="https://github.com/caronc/apprise" rel="noopener noreferrer"&gt;https://github.com/caronc/apprise&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Uptime Kuma is a powerful, customizable, and cost-effective alternative to commercial uptime monitoring tools. Whether you’re an individual developer, small business, or enterprise team, its extensive features and self-hosting model make it a go-to solution for reliable monitoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it today, and take back control of your monitoring!&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by a tech enthusiast who loves self-hosted tools. If you found this useful, consider sharing or leaving feedback!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>uptimekuma</category>
      <category>uptimerobot</category>
      <category>opensource</category>
      <category>pingdom</category>
    </item>
    <item>
      <title>🚀 Getting Started with WordPress Plugin Development: Custom Plugin Folder, Action Hooks, Menus And Views</title>
      <dc:creator>Md.ismail</dc:creator>
      <pubDate>Thu, 03 Oct 2024 09:03:49 +0000</pubDate>
      <link>https://dev.to/mdismail_e830c2c4f43ae37/getting-started-with-wordpress-plugin-development-custom-plugin-folder-action-hooks-menus-and-views-13m7</link>
      <guid>https://dev.to/mdismail_e830c2c4f43ae37/getting-started-with-wordpress-plugin-development-custom-plugin-folder-action-hooks-menus-and-views-13m7</guid>
      <description>&lt;p&gt;WordPress plugins are a great way to extend your site's functionality, and keeping your code organized makes future maintenance easier. In this guide, we'll go through creating a custom WordPress plugin with menus and submenus that render views from separate files in a clean, organized way.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Setting Up Your Custom Plugin Folder and Files
&lt;/h2&gt;

&lt;p&gt;First, you'll need to set up the file structure. Navigate to your WordPress installation's wp-content/plugins/ directory and create a folder for your plugin, such as my-custom-plugin.&lt;/p&gt;

&lt;p&gt;Inside this folder, create your main plugin file, for example, my-custom-plugin.php.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Recognizing the Plugin with Header Comments
&lt;/h2&gt;

&lt;p&gt;At the top of your my-custom-plugin.php file, add the plugin's metadata. This is how WordPress recognizes your plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
/**
 * Plugin Name: My Custom Plugin
 * Plugin URI: https://example.com/
 * Description: A custom plugin to demonstrate how to render views from separate files.
 * Version: 1.0
 * Author: Your Name
 * Author URI: https://yourwebsite.com/
 */
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Adding Menus and Submenus with Action Hooks
&lt;/h2&gt;

&lt;p&gt;Next, we’ll add custom menus to the WordPress dashboard using action hooks.&lt;/p&gt;

&lt;p&gt;Adding a Menu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;add_action('admin_menu', 'my_custom_plugin_menu');

function my_custom_plugin_menu() {
    add_menu_page(
        'My Custom Plugin',       // Page title
        'Custom Plugin',          // Menu title
        'manage_options',         // Capability
        'my-custom-plugin',       // Menu slug
        'my_custom_plugin_page',  // Callback function
        '',                       // Icon URL
        6                         // Position
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding a Submenu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;add_action('admin_menu', 'my_custom_plugin_submenu');

function my_custom_plugin_submenu() {
    add_submenu_page(
        'my-custom-plugin',        // Parent slug
        'Submenu Title',           // Page title
        'Submenu',                 // Menu title
        'manage_options',          // Capability
        'my-custom-plugin-submenu',// Menu slug
        'my_custom_submenu_page'   // Callback function
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Creating Views in Separate Files
&lt;/h2&gt;

&lt;p&gt;To keep things clean, we'll store the content of each menu and submenu in separate PHP files in a views folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;: Create the views Folder&lt;br&gt;
In the my-custom-plugin directory, create a folder called views. Inside that folder, create two files:&lt;/p&gt;

&lt;p&gt;main-menu-view.php&lt;br&gt;
submenu-view.php&lt;br&gt;
&lt;strong&gt;Step 2&lt;/strong&gt;: Add Content to the View Files&lt;br&gt;
In views/main-menu-view.php, add the content you want to display on the main plugin page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Welcome to My Custom Plugin&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;This is the main page of your plugin, loaded from the views folder.&amp;lt;/p&amp;gt;
In views/submenu-view.php, add content for the submenu page:

php
Copy code
&amp;lt;div class="wrap"&amp;gt;
    &amp;lt;h2&amp;gt;Submenu Page&amp;lt;/h2&amp;gt;
    &amp;lt;form method="post" action="options.php"&amp;gt;
        &amp;lt;?php
            settings_fields('my_custom_plugin_options_group');
            do_settings_sections('my_custom_plugin');
            submit_button();
        ?&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Load the View Files in Callback Functions&lt;br&gt;
In your my-custom-plugin.php file, modify the callback functions to include these view files when rendering the content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function my_custom_plugin_page() {
    include plugin_dir_path(__FILE__) . 'views/main-menu-view.php';
}

function my_custom_submenu_page() {
    include plugin_dir_path(__FILE__) . 'views/submenu-view.php';
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;: How This Works&lt;br&gt;
&lt;code&gt;plugin_dir_path(__FILE__)&lt;/code&gt;: This function returns the path to your plugin directory, making it easy to include files from anywhere within your plugin.&lt;br&gt;
include: This is used to pull in the content from your views folder into the menu and submenu pages.&lt;br&gt;
Now, when you access the custom menu or submenu in the WordPress admin dashboard, it will render the content from the views folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Summary
&lt;/h2&gt;

&lt;p&gt;By keeping the views for your plugin's menus and submenus in separate files, you maintain a cleaner and more organized codebase. This approach not only helps with readability but also makes your plugin easier to maintain as it grows.&lt;/p&gt;

&lt;p&gt;Give this method a try next time you develop a custom WordPress plugin—it will save you a lot of headaches down the line!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>wordpressplugin</category>
      <category>actionhook</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🚀 Selenium IDE: Remembering Our Automation Origins!</title>
      <dc:creator>Md.ismail</dc:creator>
      <pubDate>Tue, 01 Oct 2024 05:58:07 +0000</pubDate>
      <link>https://dev.to/mdismail_e830c2c4f43ae37/selenium-ide-remembering-our-automation-origins-3ga9</link>
      <guid>https://dev.to/mdismail_e830c2c4f43ae37/selenium-ide-remembering-our-automation-origins-3ga9</guid>
      <description>&lt;h3&gt;
  
  
  🚀 Selenium IDE: Remembering Our Automation Origins!
&lt;/h3&gt;

&lt;p&gt;If you’re looking for a quick way to automate browser tasks without writing code, &lt;strong&gt;Selenium IDE&lt;/strong&gt; is the tool for you. It’s a browser extension that lets you record, edit, and run tests—perfect for quick validation or simple repetitive tasks.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Brief History of Selenium IDE 📜
&lt;/h3&gt;

&lt;p&gt;Originally developed in 2006 as a part of the Selenium project, Selenium IDE allowed users to automate browser tasks through simple record-and-playback functionality. It was instrumental in popularizing web testing, making automation accessible to testers and developers alike. Over the years, while its functionality has been somewhat eclipsed by the more versatile &lt;strong&gt;Selenium WebDriver&lt;/strong&gt;, Selenium IDE remains a valuable tool for rapid test creation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Are People Using Now? 🤔
&lt;/h3&gt;

&lt;p&gt;Today, many automation testers have shifted to &lt;strong&gt;Selenium WebDriver&lt;/strong&gt; for its robust capabilities, allowing for more complex interactions and better integration with programming languages like Java, Python, and JavaScript. This shift is largely due to the need for flexibility, control, and scalability in automated testing, which WebDriver offers over the simpler IDE.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Selenium IDE? 🤔
&lt;/h3&gt;

&lt;p&gt;Selenium IDE is a &lt;strong&gt;Chrome and Firefox extension&lt;/strong&gt; that allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Record&lt;/strong&gt; your actions while browsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replay&lt;/strong&gt; those actions to automate repetitive tasks or tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt; tests into code if you want to extend them later (supports languages like Java, Python, and JavaScript).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Install Selenium IDE
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install it as a browser extension:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd" rel="noopener noreferrer"&gt;Selenium IDE for Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/" rel="noopener noreferrer"&gt;Selenium IDE for Firefox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Click on the Selenium IDE icon in your toolbar to start using it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quick Example
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Record a Test&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;"Record a new test"&lt;/strong&gt;, then visit a website and interact with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stop &amp;amp; Run the Test&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After recording, click &lt;strong&gt;"Stop"&lt;/strong&gt; and &lt;strong&gt;"Play"&lt;/strong&gt; to watch the automation run.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it! You’ve just automated your first browser task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Use Selenium IDE?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No coding needed&lt;/strong&gt;: Great for non-developers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast feedback&lt;/strong&gt;: Useful for quick tests or prototyping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-browser support&lt;/strong&gt;: Works on Chrome and Firefox.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It’s best for &lt;strong&gt;simple&lt;/strong&gt; tasks. For more complex scenarios, consider using Selenium WebDriver with a programming language.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Selenium IDE is a fantastic tool to get started with browser automation without much setup. It’s fast, easy, and perfect for basic tasks or quick testing. While it may not be the future of automation, it reminds us of how far we've come in making testing accessible to everyone.&lt;/p&gt;

</description>
      <category>selenium</category>
      <category>automation</category>
      <category>testing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>PHP Data Types</title>
      <dc:creator>Md.ismail</dc:creator>
      <pubDate>Thu, 26 Sep 2024 09:25:07 +0000</pubDate>
      <link>https://dev.to/mdismail_e830c2c4f43ae37/php-data-types-2lcj</link>
      <guid>https://dev.to/mdismail_e830c2c4f43ae37/php-data-types-2lcj</guid>
      <description>&lt;h2&gt;
  
  
  Integers
&lt;/h2&gt;

&lt;p&gt;Integers represent whole numbers, both positive and negative, without any decimal points. PHP supports decimal, hexadecimal, octal, and binary integers.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$num1 = 42;    // Decimal
$num2 = 0x1A;  // Hexadecimal
$num3 = 0123;  // Octal
$num4 = 0b101; // Binary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP offers various operations for manipulating integers, like addition, subtraction, multiplication, and division. It also provides bitwise operations for binary integers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Booleans
&lt;/h2&gt;

&lt;p&gt;A Boolean represents a logical true or false value. It’s often used in conditions and control flow.&lt;/p&gt;

&lt;p&gt;True evaluates to a value of 1, and False evaluates to an empty string or 0.&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$isValid = true;
$isEmpty = false;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Booleans are often used with comparison operators (like ==, !=, ===) and logical operators (&amp;amp;&amp;amp;, ||, !).&lt;/p&gt;

&lt;h2&gt;
  
  
  Null
&lt;/h2&gt;

&lt;p&gt;The null data type signifies the absence of a value. Any variable set to null has no value assigned.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$value = null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Casting to null using unset() has been deprecated in PHP 7.2 and removed in PHP 8.0, meaning this practice should be avoided.&lt;/p&gt;

&lt;h2&gt;
  
  
  Float
&lt;/h2&gt;

&lt;p&gt;Floating point numbers (floats) in PHP are used to represent real numbers, including numbers with decimals or in scientific notation.&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$a = 1.234;     // Simple decimal
$b = 1.2e3;     // Scientific notation
$c = 7E-10;     // Small float in scientific notation
$d = 1_234.567; // Using underscores for readability (PHP 7.4+)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP’s floating point numbers are platform-dependent, but typically they follow the 64-bit IEEE format. This allows for a maximum value of approximately 1.8e308 with a precision of about 14 decimal digits.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Floating Point Precision Issues&lt;/em&gt;:&lt;br&gt;
Floats have limited precision, For example:&lt;/p&gt;

&lt;p&gt;floor((0.1 + 0.7) * 10); // Outputs 7 instead of 8&lt;br&gt;
This occurs because numbers like 0.1 and 0.7 can't be precisely represented in binary, leading to small inaccuracies. Never rely on exact comparisons of floating point numbers; instead, use an epsilon value for comparison:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a - $b) &amp;lt; $epsilon) {
    echo "true";
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strings&lt;br&gt;
A string is a sequence of characters used to store and manipulate text in PHP. Strings can be defined in several ways using single quotes (') or double quotes (").&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$str1 = 'Hello, World!';  // Single-quoted string
$str2 = "Hello, $name!";  // Double-quoted string with variable interpolation

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PHP supports heredoc and nowdoc for multiline strings.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Heredoc example&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$text = &amp;lt;&amp;lt;&amp;lt;EOD
This is a string
that spans multiple lines.
EOD;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Nowdoc example&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$text = &amp;lt;&amp;lt;&amp;lt;'EOD'
This is a nowdoc example.
EOD;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Common Operations&lt;/em&gt;:&lt;br&gt;
Concatenation: . operator is used to concatenate two strings.&lt;/p&gt;

&lt;p&gt;$fullName = $firstName . " " . $lastName;&lt;br&gt;
String functions: strlen(), strpos(), substr(), etc.&lt;/p&gt;
&lt;h2&gt;
  
  
  Arrays
&lt;/h2&gt;

&lt;p&gt;Arrays in PHP can store multiple values in a single variable and are one of the most versatile data types. PHP arrays can be indexed or associative.&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Indexed array
$arr = [1, 2, 3, 4];

// Associative array
$arrAssoc = ["name" =&amp;gt; "John", "age" =&amp;gt; 25];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Common Operations&lt;/em&gt;:&lt;br&gt;
Adding elements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$arr[] = 5; // Adds an element to the end of the array

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accessing elements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo $arr[0];          // Outputs: 1
echo $arrAssoc['name']; // Outputs: John
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Array functions: count(), array_merge(), in_array(), array_pop(), etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Objects
&lt;/h2&gt;

&lt;p&gt;Objects in PHP represent instances of user-defined classes. A class is a blueprint for creating objects with properties and methods.&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Person {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this-&amp;gt;name = $name;
        $this-&amp;gt;age = $age;
    }

    public function greet() {
        return "Hello, my name is " . $this-&amp;gt;name;
    }
}

$person = new Person("John", 30);
echo $person-&amp;gt;greet(); // Outputs: Hello, my name is John
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key Concepts:&lt;br&gt;
Properties: Variables inside classes.&lt;br&gt;
Methods: Functions inside classes.&lt;br&gt;
$this: Refers to the current object instance.&lt;/p&gt;
&lt;h2&gt;
  
  
  Callable
&lt;/h2&gt;

&lt;p&gt;A callable in PHP refers to any variable that can be called as a function. It can be a string containing a function name, an array with an object and method, or an anonymous function (closure).&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sayHello($name) {
    return "Hello, $name!";
}

$callable = 'sayHello';
echo $callable("World"); // Outputs: Hello, World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Example of a Callable Array&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Greeter {
    public function greet($name) {
        return "Hello, $name!";
    }
}

$greeter = new Greeter();
$callable = [$greeter, 'greet'];
echo call_user_func($callable, 'John'); // Outputs: Hello, John!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Anonymous Functions (Closures)&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$callable = function($name) {
    return "Hi, $name!";
};
echo $callable("Jane"); // Outputs: Hi, Jane!



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resource
&lt;/h2&gt;

&lt;p&gt;Resources are special variables that hold references to external resources, such as database connections or file handlers. These are not primitive data types but are pointers to external resources that PHP can interact with.&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// File resource
$handle = fopen("file.txt", "r");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resources are generally used with functions that return and manipulate them, like database connections (mysqli_connect()), image manipulation (imagecreatefromjpeg()), or file operations (fopen()).&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$connection = mysqli_connect("localhost", "username", "password", "database");
if (!$connection) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully!";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thank You....&lt;/p&gt;

</description>
      <category>php</category>
      <category>laravel</category>
      <category>data</category>
    </item>
  </channel>
</rss>
