'File_get_contents(): failed to open stream: Connection refused

I am trying to download a previously uploaded file, form database and uploads folder in php codeigniter. I am using code below but downloading empty file.

controller.php

  public function downloadFile($incidents_id)
  {
  
   $file = $this->incidents_model->getfile($incidents_id);
  //echo $file; die;
  $this->load->helper('download');
  $path = file_get_contents(base_url()."uploads/".$file); //(the error shows on this line)
 // echo $path; die;
  $name = $file; // new name for your file
  // echo $name ; die;
   force_download($name, $path); // start download`
  
   }

incidents_model.php

 function getfile($Incident_id )
 {
   $file = $this->db->select('file');
           $this->db->from('incidents');
           $this->db->where('incidents_id' , $Incident_id );
   $query =  $this->db->get();
  //  return $query->row();
  if ($query->num_rows() > 0) {
     return $query->row()->file;
 }
 return false;
  
 }

view.php

<div class="form-group col-md-4">
              <a href="<?=base_url('admin/incidents/downloadFile/' .$incidents->incidents_id)?>">Download file </a>
 </div>

so running this code download an empty file.

echo $file; die; displays the file name which been saved in db and in uploads folder

echo $path; die; generates an error: Severity: Warning

Message: file_get_contents(http://localhost:8080/ticketing_tool_v2/uploads/Screenshot 2021-03-04 at 5.59.38 PM.png): failed to open stream: Connection refused

Filename: admin/Incidents.php

Line Number: 380



Solution 1:[1]

Reviewing the documentation for file_get_contents you'll observe there's many different ways you can use it. For your purposes you would need to allow inbound connections to the filesystem.

The other way you could do this for better future proofing is to use the CodeIgniter file helper - https://codeigniter.com/userguide3/helpers/file_helper.html

Solution 2:[2]

Before reading the file from path, please check whether a path points to a valid file.

public function downloadFile($incidents_id) {

try {
    $this->load->helper('download');

    $file = $this->incidents_model->getfile($incidents_id);
     
    $data = file_get_contents(base_url("uploads/" . $file));

    $name = $file; // new name for your file
        
    force_download($name, $data); // start download`
     
} catch (Exception $e) {
    //exception handling code goes here
    print_r($e);
}

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 hppycoder
Solution 2