PHP - як перадаць параметры ў клас PHP з яваскрипт і вяртае адказ назад у JS

Я спрабую выкарыстоўваць PHP Class ў спалучэнні з JavaScript, але мне трэба змяніць клас, каб мець магчымасць перадаць яму параметр, і так як я не занадта добра знаёмы з PHP, я не ведаю, як гэта зрабіць , Гэта клас, ніжэй - як вы можаце бачыць, ён выкарыстоўвае статычны пераменны $ сайт, але я хачу, каб мець магчымасць перадаць пераменны сайт у Я таксама хачу, каб мець магчымасць вярнуць дадзеныя .. Хто ведае, як гэта зрабіць?

<?php
/**
 * Makes a request to AWIS for site info.
 */
class UrlInfo {

    protected static $ActionName        = 'UrlInfo';
    protected static $ResponseGroupName = 'Rank,LinksInCount';
    protected static $ServiceHost      = 'awis.amazonaws.com';
    protected static $NumReturn         = 10;
    protected static $StartNum          = 1;
    protected static $SigVersion        = '2';
    protected static $HashAlgorithm     = 'HmacSHA256';

    public function UrlInfo($accessKeyId, $secretAccessKey, $site) {
        $this->accessKeyId = $accessKeyId;
        $this->secretAccessKey = $secretAccessKey;
        $this->site = $site;
    }

    /**
     * Get site info from AWIS.
     */ 
    public function getUrlInfo() {
        $queryParams = $this->buildQueryParams();
        $sig = $this->generateSignature($queryParams);
        $url = 'http://' . self::$ServiceHost . '/?' . $queryParams . '&Signature=' . $sig;
        echo "\nURL: " . $url . "
"; $ret = self::makeRequest($url); echo "\nResults for " . $this->site .":\n\n"; self::parseResponse($ret); } /** * Builds current ISO8601 timestamp. */ protected static function getTimestamp() { return gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()); } /** * Builds query parameters for the request to AWIS. * Parameter names will be in alphabetical order and * parameter values will be urlencoded per RFC 3986. * @return String query parameters for the request */ protected function buildQueryParams() { $params = array( 'Action' => self::$ActionName, 'ResponseGroup' => self::$ResponseGroupName, 'AWSAccessKeyId' => $this->accessKeyId, 'Timestamp' => self::getTimestamp(), 'Count' => self::$NumReturn, 'Start' => self::$StartNum, 'SignatureVersion' => self::$SigVersion, 'SignatureMethod' => self::$HashAlgorithm, 'Url' => $this->site ); ksort($params); $keyvalue = array(); foreach($params as $k => $v) { $keyvalue[] = $k . '=' . rawurlencode($v); } $keyImplode = implode('&',$keyvalue); return implode('&',$keyvalue); } /** * Makes request to AWIS * @param String $url URL to make request to * @return String Result of request */ protected static function makeRequest($url) { /*echo "\nMaking request to:\n$url\n";*/ $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); return $result; } /** * Parses xml response from AWIS and displays selected data * @param String $response xml response from AWIS */ public static function parseResponse($response) { $xml = new SimpleXMLElement($response,null,false, 'http://awis.amazonaws.com/doc/2005-07-11'); if($xml->count() && $xml->Response->UrlInfoResult->Alexa->count()) { $info = $xml->Response->UrlInfoResult->Alexa; $nice_array = array( 'Links In Count' => $info->ContentData->LinksInCount, 'Rank' => $info->TrafficData->Rank ); } foreach($nice_array as $k => $v) { echo $k . ': ' . $v ."\n"; } } /** * Generates an HMAC signature per RFC 2104. * * @param String $url URL to use in createing signature */ protected function generateSignature($url) { $sign = "GET\n" . strtolower(self::$ServiceHost) . "\n/\n". $url; echo "String to sign: \n" . $sign . "\n"; $sigHMAC = hash_hmac('sha256', $sign, $this->secretAccessKey, true); echo "
HMAC: " . $sigHMAC; $sig64 = base64_encode($sigHMAC); echo "
BASE64: " . $sig64 . "
"; $sig = base64_encode(hash_hmac('sha256', $sign, $this->secretAccessKey, true)); echo "
ENCODED URL: " . rawurlencode($sig) ."
"; return rawurlencode($sig); } } /*if (count($argv) < 4) { echo "Usage: $argv[0] ACCESS_KEY_ID SECRET_ACCESS_KEY site\n"; exit(-1); } else { $accessKeyId = $argv[1]; $secretAccessKey = $argv[2]; $site = $argv[3]; }*/ $accessKeyId = "AKIAJA664T37BDNPSXXX"; $secretAccessKey = "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"; $site = "http://site.com"; $urlInfo = new UrlInfo($accessKeyId, $secretAccessKey, $site); $urlInfo->getUrlInfo(); ?>
1

2 адказы

Я не думаю, што вы павінны змяніць клас. Проста пабудаваць сабе PHP-скрыпт, які вы Cann перадаць зменныя з вашых JS, каб, і які генеруе JSON. г.д.:

<?php
    $data = array();
    if ($_GET['ONE_PARAM'])
    {
        $url = new UrlInfo();
        $data = $url->YOUR_METHOD($_GET['ONE_PARAM']);
    }
    header('Content-type: application/json');
    echo(json_encode($data));
?>

Затым вы перадаеце свае JS-зменныя з дапамогай AJAX для вашага PHP-скрыпт, і прачытаць адказ адтуль.

2
дададзена

Вы ніколі не вызначыце зменныя класа, якія выкарыстоўваюцца ў канструктару. Вы павінны абвясьціць іх у сваім класе:

<?php
/**
 * Makes a request to AWIS for site info.
 */
class UrlInfo {

    protected static $ActionName        = 'UrlInfo';
    protected static $ResponseGroupName = 'Rank,LinksInCount';
    protected static $ServiceHost      = 'awis.amazonaws.com';
    protected static $NumReturn         = 10;
    protected static $StartNum          = 1;
    protected static $SigVersion        = '2';
    protected static $HashAlgorithm     = 'HmacSHA256';

   //Add your public class variables here
    public $accessKeyId;
    public $secretAccessKey;
    public $site;

    public function UrlInfo($accessKeyId, $secretAccessKey, $site) {
        $this->accessKeyId = $accessKeyId;
        $this->secretAccessKey = $secretAccessKey;
        $this->site = $site;
    }
0
дададзена