| Autor | Zpráva | ||
|---|---|---|---|
| blahapet Profil |
#1 · Zasláno: 3. 12. 2025, 08:54:58
Dobrý den všem, mám prosbu. Snažím se zprovoznit SMS službu no hostingu 90, kde mají standardně zakázanou direktivu allow_url_fopen. Doporučení je zde.
Níže mám současný skript, který se zapnutou allow_url_fopen mi běžně jinde funguje: <?php
define("BLOCK_SIZE",8192);
define("API_URL","https://smsgateapi.sms-sluzba.cz/apipost30/sms");
define("AUTH_MSG_LENGTH",31);
class ApiPost30{
private $recipient, $text, $login, $password, $smsgateapi_url, $params, $encoding;
public function ApiPost30($login, $password, $encoding="UTF-8") {
$this->login = $login;
$this->password = $password;
$this->encoding = $encoding;
$this->params = Array();
}
public function send() {
$handle = fopen($this->get_url(),'rb',false,$this->get_params());
$contents = '';
if (!$handle)
return false;
while (!feof($handle)) {
$contents .= fread($handle, BLOCK_SIZE);
}
fclose($handle);
echo $contents;
}
public function set_recipient($recipient) { $this->recipient = $recipient; }
public function set_text($text) { $this->text = $text; }
private function get_url() { return API_URL; }
private function get_params() {
$data = array ('login' => $this->login, 'act' => 'send', 'msisdn' => $this->recipient, 'msg'=>$this->text, 'auth'=>$this->get_auth());
$data = http_build_query($data, '', '&');
$params = array('http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
'content' => $data
));
return stream_context_create($params);
}
private function get_auth() { return md5(md5($this->password).$this->login.'send'.substr($this->text,0,AUTH_MSG_LENGTH)); }
}
/*------------------------- ODESLÁNÍ ZPRÁVY --------------------------------------- */
$sms_recipient = "+420604863288";
define('SMSLOGIN','___LOGIN____');
define('SMSPASSWORD','___HESLO___');
require_once("sms.php");
$apipost = new ApiPost30(SMSLOGIN, SMSPASSWORD);
$apipost->set_recipient($sms_recipient);
$apipost->set_text('Test esemesky');
$apipost->send();
?>Skript jsem si upravil tak, že jsem tam vložil novou privátní metodu getCurl() a poté pozměnil původní privátní metodu get_url() private function getCurl(){
$handler = curl_init(API_URL);
curl_setopt($handler, CURLOPT_RETURNTRANSFER,1);
$obsah = curl_exec($handler);
curl_close($handler);
return $obsah;
}
private function get_url() { return $this->getCurl(); }Skript mi po spuštění hází chybu u metody send(), konkrétně řádek: public function send() {
$handle = fopen($this->get_url(),'rb',false,$this->get_params());
... ... ... .
}Warning: fopen(): Filename cannot be empty in ... ... ... Nevíte prosím, kde dělám chybu? Děkuju moc za každou radu. |
||
| Kajman Profil |
#2 · Zasláno: 3. 12. 2025, 12:22:40
Musíte přece přepsat tu metodu send, aby používala curl.
Parametry předáte např. dle příkladu www.php.net/manual/en/curl.examples-basic.php#117009 podle toho, jak server očekává data. |
||
| blahapet Profil |
#3 · Zasláno: 3. 12. 2025, 13:34:13
blahapet:
Díky moc za nasměrování. Metodu send() jsem přepsal takto, nicméně se po stisknutí klávesy F5 zobrazuje jen bílá stránka i se zapnutým chybovým hlášením... public function send() {
$params = $this->get_params();
$defaults = array(
CURLOPT_URL => API_URL,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
);
$ch = curl_init();
curl_setopt_array($ch, $defaults);
}Omlouvám se, jsem v tom neználek. |
||
| Kajman Profil |
#4 · Zasláno: 3. 12. 2025, 13:47:14
To curl musíte pustit a vypsat výsledek, jinak bude bílá stránka vždy.
... curl_setopt_array($ch, $defaults); $obsah = curl_exec($ch); curl_close($ch); echo $obsah; |
||
| blahapet Profil |
#5 · Zasláno: 3. 12. 2025, 14:38:19
Opět díky moc za pomoc... V podstatě se nic nezměnilo, jen je vidět, že skript pracuje o 1-2 sekundu déle a zase bílo... Pro přehlednost zasílám znovu celý skript. Jen pototýkám, že při zkoušce odesílání jsem na konci souboru LOGIN a HESLO měl správně dosazeno.
<?php
define("BLOCK_SIZE",8192);
define("API_URL","https://smsgateapi.sms-sluzba.cz/apipost30/sms");
define("AUTH_MSG_LENGTH",31);
class ApiPost30{
private $recipient, $text, $login, $password, $smsgateapi_url, $params, $encoding;
public function ApiPost30($login, $password, $encoding="UTF-8") {
$this->login = $login;
$this->password = $password;
$this->encoding = $encoding;
$this->params = Array();
}
public function send() {
$params = $this->get_params();
$defaults = array(
CURLOPT_URL => API_URL,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $params,
);
$ch = curl_init();
curl_setopt_array($ch, $defaults);
$obsah = curl_exec($ch);
curl_close($ch);
echo $obsah;
}
public function set_recipient($recipient) { $this->recipient = $recipient; }
public function set_text($text) { $this->text = $text; }
private function get_params() {
$data = array ('login' => $this->login, 'act' => 'send', 'msisdn' => $this->recipient, 'msg'=>$this->text, 'auth'=>$this->get_auth());
$data = http_build_query($data, '', '&');
$params = array('http' => array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
'content' => $data
));
return stream_context_create($params);
}
private function get_auth() { return md5(md5($this->password).$this->login.'send'.substr($this->text,0,AUTH_MSG_LENGTH)); }
}
/*---------------------------------------------------------------- */
$sms_recipient = "+420604863288";
define('SMSLOGIN','__LOGIN__');
define('SMSPASSWORD','__HESLO__');
//require_once("sms.php");
$apipost = new ApiPost30(SMSLOGIN, SMSPASSWORD);
$apipost->set_recipient($sms_recipient);
$apipost->set_text('Test esemesky');
$apipost->send();
?> |
||
| blaaablaaa Profil |
blahapet:
Mícháte tam dvě věci dohromady. Takže: 1. HTTP hlavičky se nastavují přes CURLOPT_HTTPHEADER curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded; charset=utf-8']); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['login' => $this->login, 'act' => 'send', 'msisdn' => $this->recipient, 'msg'=>$this->text, 'auth'=>$this->get_auth()])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); ini_set('display_errors', 1); |
||
| blahapet Profil |
#7 · Zasláno: 4. 12. 2025, 10:53:22
Díky moc za nasměrování, moc jste mi pomohl. Metodu send() jsem přestavěl takto, asi by to šlo i lépe, ale SMSky konečně odcházejí.
public function send() {
$defaults = array(
CURLOPT_URL => API_URL,
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded; charset=utf-8'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['login' => $this->login, 'act' => 'send', 'msisdn' => $this->recipient, 'msg'=>$this->text, 'auth'=>$this->get_auth()]),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt_array($ch, $defaults);
$obsah = curl_exec($ch);
curl_close($ch);
echo $obsah;
} |
||
|
Časová prodleva: 8 měsíců
|
|||
0