0

I feel like I'm missing something incredibly stupid here. I am not too familiar with OOP principals, specifically in PHP and am trying to learn. How do I access a class method's property in PHP? I specifically want to get the $AWSresponse property that is returned from this method. The value of $AWSresponse in JSON form is below.

In UploadHandler.php I have the post() method (full UploadHandler.php class is here):

public $AWSresponse;
public function post($print_response = true) {
    if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
        return $this->delete($print_response);
    }
    $upload = isset($_FILES[$this->options['param_name']]) ?
        $_FILES[$this->options['param_name']] : null;
    // Parse the Content-Disposition header, if available:
    $file_name = $this->get_server_var('HTTP_CONTENT_DISPOSITION') ?
        rawurldecode(preg_replace(
            '/(^[^"]+")|("$)/',
            '',
            $this->get_server_var('HTTP_CONTENT_DISPOSITION')
        )) : null;
    // Parse the Content-Range header, which has the following form:
    // Content-Range: bytes 0-524287/2000000
    $content_range = $this->get_server_var('HTTP_CONTENT_RANGE') ?
        preg_split('/[^0-9]+/', $this->get_server_var('HTTP_CONTENT_RANGE')) : null;
    $size =  $content_range ? $content_range[3] : null;
    $files = array();
    if ($upload && is_array($upload['tmp_name'])) {
        // param_name is an array identifier like "files[]",
        // $_FILES is a multi-dimensional array:
        foreach ($upload['tmp_name'] as $index => $value) {
            $files[] = $this->handle_file_upload(
                $upload['tmp_name'][$index],
                $file_name ? $file_name : $upload['name'][$index],
                $size ? $size : $upload['size'][$index],
                $upload['type'][$index],
                $upload['error'][$index],
                $index,
                $content_range
            );
        }
    } else {
        if( isset($_POST['fileSourceChooser']) && $_POST['fileSourceChooser']=='dropbox' ){

            //http://justinvincent.com/page/1087/how-to-get-the-mime-type-of-a-remote-file-in-php-with-redirects
            function get_url_mime_type($url){
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                curl_setopt($ch, CURLOPT_HEADER, 1);
                curl_setopt($ch, CURLOPT_NOBODY, 1);
                curl_exec($ch);
                return curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
            }
                $upload=$_POST['files']; ////if just a regular post
                $upload['parse_url']=parse_url($upload['link']);
                $upload['url']='https://dl.dropboxusercontent.com'.$upload['parse_url']['path'];
                    $files[] = $this->handle_file_upload(
                        $upload['url'],
                        $file_name ? $file_name : $upload['name'],
                        $size ? $size : $upload['bytes'],
                        get_url_mime_type($upload['url']), 
                        "", 
                        null, null,
                        $content_range
                    );  

                    file_put_contents(
                        $this->options['upload_dir'].'thumbnail/'.$upload['name'],
                        fopen($upload['thumbnail'], 'r'),
                        FILE_APPEND //$append_file ? FILE_APPEND : 0
                    );                        
        }
        else{
            // param_name is a single object identifier like "file",
            // $_FILES is a one-dimensional array:
            $files[] = $this->handle_file_upload(
                isset($upload['tmp_name']) ? $upload['tmp_name'] : null,
                $file_name ? $file_name : (isset($upload['name']) ?
                        $upload['name'] : null),
                $size ? $size : (isset($upload['size']) ?
                        $upload['size'] : $this->get_server_var('CONTENT_LENGTH')),
                isset($upload['type']) ?
                        $upload['type'] : $this->get_server_var('CONTENT_TYPE'),
                isset($upload['error']) ? $upload['error'] : null,
                null,
                $content_range
            );                
        }
    }
        $AWSresponse = $this->generate_response(
        array($this->options['param_name'] => $files),
        $print_response
    );
    return $AWSresponse;
}

In index.php I have:

require('UploadHandler.php');
$upload_handler = new UploadHandler();
$r = $upload_handler->AWSresponse;
var_dump($r); // returns NULL

This class (and associated jquery plugin) dumps the following to the browser's console from $AWSresponse, however:

{"files":[{"name":"Test(7).mov","size":1202952,"type":"video\/quicktime","url":"https:\/\/prefix.s3.amazonaws.com\/bucket\/Test%20%287%29.mov","deleteUrl":"https\/\/mysite.com\/server\/php\/?file=Test%20%287%29.mov&_method=DELETE","deleteType":"POST"}]}
11
  • vardump should be var_dump Commented Apr 11, 2017 at 12:23
  • Whoops. I've fixed the code, but am left with the same problem. Commented Apr 11, 2017 at 12:25
  • I don't really get what your issue is? What is the output suppose to look like? Commented Apr 11, 2017 at 12:27
  • 1
    If you look in the UploadHandler class, you'll see that there are only 4 public methods: head(), get(), post() and delete(). So all you can do with an object of this class is call one of those. You are referencing "$upload_handler->AWSresponse" which does not exist so you get null. Commented Apr 11, 2017 at 12:35
  • 1
    You're mixing up properties ($class->$property) with methods ($class->method()). post() is a method, not a property, which is why $class->$post doesn't work. Commented Apr 11, 2017 at 12:56

2 Answers 2

1

I think you should try this approach:

require('UploadHandler.php');
$upload_handler = new UploadHandler();
$myAWSresponse = $upload_handler->post();
var_dump($myAWSresponse); 
Sign up to request clarification or add additional context in comments.

Comments

0

I think you should use $this->AWSresponse to access class property in function post() like:

return $this->AWSresponse;

and when you assign value in $AWSresponse use $this->AWSresponse like:

$this->AWSresponse = $this->generate_response(
        array($this->options['param_name'] => $files),
        $print_response
    );

3 Comments

Does $this work if I'm calling it from outside of the class?
No. $this refers to the instance of the "current" object.
Okay, that's what I thought. Maybe I'm cart before wagoning this in my head. The class is doing what I want it to do and it's outputting data to the browser's console. Am I wrong in thinking I need to modify the class?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.