Debug School

rakesh kumar
rakesh kumar

Posted on • Updated on

How to check current dynamic request url is broken in laravel

Using Guzzle HTTP Client:
Using file_get_contents()
Using cURL
How to enable cURL

Using Guzzle HTTP Client

1.Create a database migration to add a status field to your table.

2.Update your model to include the new field.

3.Create a controller method to handle the dynamic request URL and update the database accordingly.

Here's an example implementation:

Step 1: Create a migration to add the status field to your table.

php artisan make:migration add_status_to_your_table --table=your_table_name
Enter fullscreen mode Exit fullscreen mode

In the generated migration file, add the following code to add the status field:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddStatusToYourTable extends Migration
{
    public function up()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->boolean('status')->default(false);
        });
    }

    public function down()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->dropColumn('status');
        });
    }
}
Enter fullscreen mode Exit fullscreen mode

Run the migration:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

Step 2: Update your model (assuming your model is YourModel):

namespace App;

use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{
    protected $fillable = [
        // your existing fillable fields,
        'status',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Create a controller method to handle the dynamic request URL and update the database:

// app/Http/Controllers/YourController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\YourModel;

class YourController extends Controller
{
    public function handleDynamicRequest(Request $request)
    {
        // Assuming your dynamic URL parameter is named 'url' in the input field
        $url = $request->input('url');

        // Perform any validation or processing on the URL if needed

        // Check if the URL is working (you may need to customize this logic)
        $isUrlWorking = $this->checkIfUrlIsWorking($url);

        // Update the database based on the status
        YourModel::updateOrCreate(
            ['url' => $url], // Use the actual column name in your table
            ['status' => $isUrlWorking]
        );

        return response()->json(['message' => 'URL status updated successfully']);
    }

    private function checkIfUrlIsWorking($url)
    {
        // Implement your logic to check if the URL is working
        // You can use libraries like Guzzle or native PHP functions like file_get_contents()

        // For example, using Guzzle:
        try {
            $response = \GuzzleHttp::get($url);
            return $response->getStatusCode() === 200;
        } catch (\Exception $e) {
            return false;
        }
    }
}

Enter fullscreen mode Exit fullscreen mode
use GuzzleHttp\Client;

private function checkIfUrlIsWorkingWithGuzzle($url)
{
    $client = new Client();

    try {
        $response = $client->get($url);
        return $response->getStatusCode() === 200;
    } catch (\Exception $e) {
        return false;
    }
}

Enter fullscreen mode Exit fullscreen mode
composer require guzzlehttp/guzzle
Enter fullscreen mode Exit fullscreen mode

Remember to adjust the code according to your specific requirements, table structure, and validation needs. Also, make sure to set up proper error handling in a production environment.

Using file_get_contents()

1.Create a database migration to add a status field to your table.

2.Update your model to include the new field.

3.Create a controller method to handle the dynamic request URL and update the database accordingly.

Here's an example implementation:

Step 1: Create a migration to add the status field to your table.

php artisan make:migration add_status_to_your_table --table=your_table_name
Enter fullscreen mode Exit fullscreen mode

In the generated migration file, add the following code to add the status field:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddStatusToYourTable extends Migration
{
    public function up()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->boolean('status')->default(false);
        });
    }

    public function down()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->dropColumn('status');
        });
    }
}
Enter fullscreen mode Exit fullscreen mode

Run the migration:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

Step 2: Update your model (assuming your model is YourModel):

namespace App;

use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{
    protected $fillable = [
        // your existing fillable fields,
        'status',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Create a controller method to handle the dynamic request URL and update the database:

// app/Http/Controllers/YourController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\YourModel;

class YourController extends Controller
{
    public function handleDynamicRequest(Request $request)
    {
        // Assuming your dynamic URL parameter is named 'url' in the input field
        $url = $request->input('url');

        // Perform any validation or processing on the URL if needed

        // Check if the URL is working (you may need to customize this logic)
        $isUrlWorking = $this->checkIfUrlIsWorking($url);

        // Update the database based on the status
        YourModel::updateOrCreate(
            ['url' => $url], // Use the actual column name in your table
            ['status' => $isUrlWorking]
        );

        return response()->json(['message' => 'URL status updated successfully']);
    }

private function checkIfUrlIsWorkingWithFileGetContents($url)
{
    $content = @file_get_contents($url);

    return $content !== false;
}
}

Enter fullscreen mode Exit fullscreen mode

Using cURL:

1.Create a database migration to add a status field to your table.

2.Update your model to include the new field.

3.Create a controller method to handle the dynamic request URL and update the database accordingly.

Here's an example implementation:

Step 1: Create a migration to add the status field to your table.

php artisan make:migration add_status_to_your_table --table=your_table_name
Enter fullscreen mode Exit fullscreen mode

In the generated migration file, add the following code to add the status field:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddStatusToYourTable extends Migration
{
    public function up()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->boolean('status')->default(false);
        });
    }

    public function down()
    {
        Schema::table('your_table_name', function (Blueprint $table) {
            $table->dropColumn('status');
        });
    }
}
Enter fullscreen mode Exit fullscreen mode

Run the migration:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

Step 2: Update your model (assuming your model is YourModel):

namespace App;

use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{
    protected $fillable = [
        // your existing fillable fields,
        'status',
    ];
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Create a controller method to handle the dynamic request URL and update the database:

// app/Http/Controllers/YourController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\YourModel;

class YourController extends Controller
{
    public function handleDynamicRequest(Request $request)
    {
        // Assuming your dynamic URL parameter is named 'url' in the input field
        $url = $request->input('url');

        // Perform any validation or processing on the URL if needed

        // Check if the URL is working (you may need to customize this logic)
        $isUrlWorking = $this->checkIfUrlIsWorking($url);

        // Update the database based on the status
        YourModel::updateOrCreate(
            ['url' => $url], // Use the actual column name in your table
            ['status' => $isUrlWorking]
        );

        return response()->json(['message' => 'URL status updated successfully']);
    }

private function checkIfUrlIsWorkingWithCurl($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $statusCode === 200;
}
}

Enter fullscreen mode Exit fullscreen mode

How to enable cURL

Step 1: Check if cURL is Installed
Run the following command in your terminal to check if the cURL extension is already installed:

php -m | grep curl
Enter fullscreen mode Exit fullscreen mode

If cURL is installed, you will see "curl" in the list of installed modules.

Step 2: Install cURL Extension
If cURL is not installed, you need to install it. The process for installing cURL depends on your server's operating system.

For Ubuntu/Debian:

sudo apt-get update
sudo apt-get install php-curl
Enter fullscreen mode Exit fullscreen mode
sudo yum install php-curl
Enter fullscreen mode Exit fullscreen mode

For Windows:
For Windows users, you can enable cURL by uncommenting the following line in your php.ini file:

extension=curl
Enter fullscreen mode Exit fullscreen mode

Step 3: Restart PHP Server
After installing or enabling cURL, you need to restart your PHP server (e.g., Apache or Nginx). If you are using PHP's built-in server during development, you can restart it by stopping and restarting the server.

Step 4: Verify cURL is Enabled
Run the same command as in Step 1 to verify that cURL is now enabled:

php -m | grep curl
Enter fullscreen mode Exit fullscreen mode
use Illuminate\Http\Request;

class YourController extends Controller
{
    public function curlExample(Request $request)
    {
        $url = $request->input('url');

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($statusCode === 200) {
            // URL is working
            return response()->json(['message' => 'URL is working']);
        } else {
            // URL is not working
            return response()->json(['message' => 'URL is not working'], 500);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

explanation

Image description

Image description

Image description

Image description

Image description

Image description

Make sure to adjust the code according to your specific use case and error handling needs. This example checks if the URL is working using cURL and returns a JSON response indicating the status.

Refrences

Top comments (2)

Collapse
 
rajesh_kumar profile image
Rajesh Kumar

Very good. thanks for sharing this guide.

Collapse
 
amitcotocus profile image
Amit kumar

Very well your code is working for me ....