• Загрузка фото на сервер ВК?

    Ошибка 129 означает что вы загрузили не допустимый формат изображения.
    Ошибка 100 означает что один из необходимых параметров был не передан или неверен.
    $token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    $img = "1.png";
    
    $otvet = curl( 'https://api.vk.com/method/photos.getOwnerPhotoUploadServer?owner_id=xxxxxxx&v=5.45&access_token=' . $token );
    
    $uploadJson = json_decode( $otvet, true )[ 'response' ];
    $info_server_photo = curl( $uploadJson[ 'upload_url' ] );
    
    
    
    $ch = curl_init(); 
    curl_setopt( $ch, CURLOPT_URL, $uploadJson[ 'upload_url' ] ); 
    curl_setopt( $ch, CURLOPT_POST, 1 ); 
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt( $ch, CURLOPT_POSTFIELDS,  array( 'file' => dirname( __FILE__ ) . '\\' . $img ) ); 
    $otvet_photo = curl_exec( $ch ); 
    curl_close( $ch );
    
    $info_server_photo = json_decode( $otvet_photo, true );
    $savePhoto = curl( 'https://api.vk.com/method/photos.saveWallPhoto?access_token=' . $token . '&server=' . $info_server_photo[ 'server' ] . '&photo=' . $info_server_photo[ 'photo' ] . '&hash=' . $info_server_photo[ 'hash' ] );
    print_r( json_decode( $savePhoto, true ) );
    
    function curl( $url ){
        $ch = curl_init( $url );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
        $response = curl_exec( $ch );
        curl_close( $ch );
        return $response;    
    }
    Ответ написан
    Комментировать
  • В чем тут ошибка синтаксиса mysql?

    $this->db->query("UPDATE `order` SET `telephone` = '1477' WHERE `order_id`='12757'");
    Ответ написан
    Комментировать
  • Какие Вы знаете источники знаний о PHP?

    Ответ написан
    Комментировать
  • SMTP Пример, простой отправки письма!?

    Вот тебе функция отправки письма через SMTP:

    <?php
    /**
    * smtp_mail() - Отправка электронной почты с авторизацией через SMTP сервер
    * v1.0.0
    *
    * smtp_read(); smtp_write() - вторичные
    * Подключаемая пользовательская функция для отправки сообщений по электронной почте 
    * с использованием аутентификации пользователя на почтовом сервере SMTP.
    * Рекомендуется использовать в том случае, если стандартная функция mail()
    * на хостинге работает неправильно или с ошибками. Данная функция корректно 
    * работает на PHP 4 и выше с установленным модулем расширения php_sockets
    * 
    *
    * http://koks-host.ru
    * Оригинальная кодировка UTF-8
    */
    
    function smtp_mail ($smtp,			// SMTP-сервер
    					$port,			// порт SMTP-сервера
    					$login,			// имя пользователя для доступа к почтовому ящику
    					$password, 		// пароль для доступа к почтовому ящику
    					$from,			// адрес электронной почты отправителя
    					$from_name,		// имя отправителя
    					$to, 			// адрес электронной почты получателя
    					$subject, 		// тема сообщения
    					$message,		// текст сообщения
    					$res)			// сообщение, выводимое при успешной отправке
    {	
    
    //    header('Content-Type: text/plain;');	// необязательный параметр, особенно если включаем через include()
    //    error_reporting(E_ALL ^ E_WARNING);	// необязательный параметр, включает отображение всех ошибок и предупреждений
    //    ob_implicit_flush();					// необязательный параметр, включает неявную очистку
    
    //    блок для других кодировок, отличных от UTF-8
    //    $message = iconv("UTF-8","KOI8-R",$message); // конвертируем в koi8-r
    //    $message = "Content-Type: text/plain; charset=\"koi8-r\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n".$message; // конвертируем в koi8-r
    //    $subject=base64_encode(iconv("UTF-8","KOI8-R",$subject)); // конвертируем в koi8-r
    //    $subject=base64_encode($subject); // конвертируем в koi8-r
    
    	$from_name = base64_encode($from_name);
    	$subject = base64_encode($subject);
    	$message = base64_encode($message);
        $message = "Content-Type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: base64\r\nUser-Agent: Koks Host Mail Robot\r\nMIME-Version: 1.0\r\n\r\n".$message;
        $subject="=?utf-8?B?{$subject}?=";
        $from_name="=?utf-8?B?{$from_name}?=";
    
        try {
            
            $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            if ($socket < 0) {
                throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
            }
    
            $result = socket_connect($socket, $smtp, $port);
            if ($result === false) {
                throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
            } 
    
            smtp_read($socket);
            
            smtp_write($socket, 'EHLO '.$login);
            smtp_read($socket); 
            smtp_write($socket, 'AUTH LOGIN');
            smtp_read($socket);        
            smtp_write($socket, base64_encode($login));
            smtp_read($socket);
            smtp_write($socket, base64_encode($password));
            smtp_read($socket); 
            smtp_write($socket, 'MAIL FROM:<'.$from.'>');
            smtp_read($socket); 
            smtp_write($socket, 'RCPT TO:<'.$to.'>');
            smtp_read($socket); 
            smtp_write($socket, 'DATA');
            smtp_read($socket); 
            $message = "FROM:".$from_name."<".$from.">\r\n".$message; 
            $message = "To: $to\r\n".$message; 
            $message = "Subject: $subject\r\n".$message;
    
    	date_default_timezone_set('UTC');
    	$utc = date('r');
    
            $message = "Date: $utc\r\n".$message;
            smtp_write($socket, $message."\r\n.");
            smtp_read($socket); 
            smtp_write($socket, 'QUIT');
            smtp_read($socket); 
            return $res;
            
        } catch (Exception $e) {
            echo "\nError: ".$e->getMessage();
        }
    
       
        if (isset($socket)) {
            socket_close($socket);
        }
    }
    
    function smtp_read($socket) {
    	$read = socket_read($socket, 1024);
            if ($read{0} != '2' && $read{0} != '3') {
                if (!empty($read)) {
                    throw new Exception('SMTP failed: '.$read."\n");
                } else {
                    throw new Exception('Unknown error'."\n");
                }
            }
    }
        
    function smtp_write($socket, $msg) {
    	$msg = $msg."\r\n";
    	socket_write($socket, $msg, strlen($msg));
    }
    
    ?>


    Думаю поймешь как использовать.
    Ответ написан
  • Какой бессплатный хостинг выдержит хаброефект?

    Можно за 30р тут Koks Host. Вроде держит файлообменник.
    Ответ написан
    Комментировать
  • Как сделать обратный счетчик времени между двумя датами UNIX?

    timer.js
    var int1 = parseInt(document.getElementById("int1").innerHTML);
        var int2 = parseInt(document.getElementById("int2").innerHTML);
    
        document.getElementById('timer_inp2').innerHTML = int1 - int2;
    function timer() {
      var obj=document.getElementById('timer_inp2'); 
      obj.innerHTML--;  
      
      if(obj.innerHTML > 0) {
        
        // Если больше дня
        if(obj.innerHTML >= (24*60*60)) {
          
          var d = Math.floor(obj.innerHTML / (24*60*60));
          var h = Math.floor(obj.innerHTML % (24*60*60));
          
          if(h >= 3600) {
            var h = Math.floor(h / 3600);
          }
          else if(h >= 60) {
            var m = Math.floor(h / 60);
            var h = 0;
          }
          else {
            var s = h;
            var h = 0;
            var m = 0;
          }
        }
        // Если больше часа
        else if(obj.innerHTML >= 3600) {
          
          var h = Math.floor(obj.innerHTML / 3600);
          var m = Math.floor(obj.innerHTML % 3600);
          
          if(m >= 60) {
            var m = Math.floor(m / 60);
          }
          else {
            var s = m;
            var m = 0;
          }
          
        }
        // Если больше минуты
        else if(obj.innerHTML >= 60) {
          var m = Math.floor(obj.innerHTML / 60);
          var s = Math.floor(obj.innerHTML % 60);
        }
        // Если меньше минуты
        else {
          var s = obj.innerHTML;
        }
        
        //var d = Math.floor(obj.innerHTML / (365 *24*60*60));
        var days = (d > 0) ? d+'дн ' : '';
        var hours = (h > 0) ? h+'ч ' : '';
        var minutes = (m > 0) ? m+'м ' : '';
        var seconds = (s > 0) ? s+'с ' : '';
        
        document.getElementById('new_time').innerHTML = '<div>осталось: '+days+hours+minutes+seconds+'</div>';
        setTimeout(timer,1000);
      }
    }
    setTimeout(timer,1000);


    index.html
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
      <title>Test</title>
      <link rel="stylesheet" type="text/css" href="style.css" />
      </head>
    <body>
      <div style="display:none" id="int1" class="green">300</div><!--Дата окончания-->
      <div style="display:none" id="int2" class="green">200</div><!--Дата начала-->
      <div id="timer_inp2" class="green"></div>
      <div id="new_time"></div>
      <script type="text/javascript" src="timer.js"></script><!--Обязательно в конце-->
      </body>
    </html>
    Ответ написан
  • Как транспонировать результат в MySql?

    ALTER TABLE `table`
    DROP `group` ,
    DROP `value` ,
    ADD `group2` INT(255) NULL DEFAULT NULL ,
    ADD `group3` INT(255) NULL DEFAULT NULL , 
    ADD `group5` INT(255) NULL DEFAULT NULL , 
    ADD `group12` INT(255) NULL DEFAULT NULL ;
    
    UPDATE `basename`.`table` SET `group2` = '34', `group3` = '0', `group5` = '0', `group12` = '0' WHERE `table`.`id` = 1; 
    UPDATE `basename`.`table` SET `group2` = '34', `group3` = '0', `group5` = '0', `group12` = '0' WHERE `table`.`id` = 2; 
    UPDATE `basename`.`table` SET `group2` = '0', `group3` = '11', `group5` = '0', `group12` = '0' WHERE `table`.`id` = 3; 
    UPDATE `basename`.`table` SET `group2` = '0', `group3` = '0', `group5` = '12', `group12` = '0' WHERE `table`.`id` = 4; 
    UPDATE `basename`.`table` SET `group2` = '0', `group3` = '11', `group5` = '0', `group12` = '0' WHERE `table`.`id` = 5;
    UPDATE `basename`.`table` SET `group2` = '0', `group3` = '0', `group5` = '0', `group12` = '1' WHERE `table`.`id` = 6;
    Ответ написан
    Комментировать
  • Возможно ли шифрование пустоты?

    Да можно.
    Ответ написан
    Комментировать
  • Какие технологии стоит освоить?

    PHP, HTML.
    Ответ написан
    Комментировать
  • Как исправить ошибку "Соединение было сброшено"?

    djalexsey
    @djalexsey Автор вопроса
    При запуске скрипта, он отправляет XML запрос файлу agent.php, а файл agent.php перезапускает apache т.к создаётся новая подписка.
    Ответ написан
    Комментировать
  • Как подключть стиль css из git hub?

    А не проще создать файл стиля и добавить содержимое данного стиля. Код маленький.
    .fork-me-link {
    	display: block;
    	position: absolute;
    	top: 0;
    	right: -95px;
    	outline: none;
    	-webkit-transition-property: right;
    	-webkit-transition-duration: 1s;
    	-moz-transition-property: right;
    	-moz-transition-duration: 1s;
    	-ms-transition-property: right;
    	-ms-transition-duration: 1s;
    	-o-transition-property: right;
    	-o-transition-duration: 1s;
    }
    .fork-me-link:hover{
    	right: 0;
    }
    Ответ написан
    5 комментариев
  • Как сделать эту форму адаптивной?

    .form-bg { background:#FFF; width: 100%; height: 490px; float: none; margin-top: 10px; border-radius: 10px;}
    Ответ написан
    1 комментарий
  • Как настроить оплату через WalletOne?

    djalexsey
    @djalexsey Автор вопроса
    result.php
    <?php
    
    // Секретный ключ интернет-магазина (настраивается в кабинете)
    
    $skey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    
    // Функция, которая возвращает результат в Единую кассу
    
    function print_answer($result, $description)
    {
    print "WMI_RESULT=" . strtoupper($result) . "&";
    print "WMI_DESCRIPTION=" .urlencode($description);
    exit();
    }
    
    // Проверка наличия необходимых параметров в POST-запросе
    
    if (!isset($_POST["WMI_SIGNATURE"]))
    print_answer("Retry", "Отсутствует параметр WMI_SIGNATURE");
    
    if (!isset($_POST["WMI_PAYMENT_NO"]))
    print_answer("Retry", "Отсутствует параметр WMI_PAYMENT_NO");
    
    if (!isset($_POST["WMI_ORDER_STATE"]))
    print_answer("Retry", "Отсутствует параметр WMI_ORDER_STATE");
    
    // Извлечение всех параметров POST-запроса, кроме WMI_SIGNATURE
    
    foreach($_POST as $name => $value)
    {
    if ($name !== "WMI_SIGNATURE") $params[$name] = $value;
    }
    
    // Сортировка массива по именам ключей в порядке возрастания
    // и формирование сообщения, путем объединения значений формы
    
    uksort($params, "strcasecmp"); $values = "";
    
    foreach($params as $name => $value)
    {
    //Конвертация из текущей кодировки (UTF-8)
    //необходима только если кодировка магазина отлична от Windows-1251
    $value = iconv("utf-8", "windows-1251", $value);
    $values .= $value;
    }
    
    // Формирование подписи для сравнения ее с параметром WMI_SIGNATURE
    
    $signature = base64_encode(pack("H*", md5($values . $skey)));
    
    //Сравнение полученной подписи с подписью W1
    
    if ($signature == $_POST["WMI_SIGNATURE"])
    {
    if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED")
    {
    // TODO: Пометить заказ, как «Оплаченный» в системе учета магазина
    
    print_answer("Ok", "Заказ #" . $_POST["WMI_PAYMENT_NO"] . " оплачен!");
    }
    else
    {
    // Случилось что-то странное, пришло неизвестное состояние заказа
    
    print_answer("Retry", "Неверное состояние ". $_POST["WMI_ORDER_STATE"]);
    }
    }
    else
    {
    // Подпись не совпадает, возможно вы поменяли настройки интернет-магазина
    
    print_answer("Retry", "Неверная подпись " . $_POST["WMI_SIGNATURE"]);
    }
    
    ?>

    pay.php
    //Секретный ключ интернет-магазина
    $key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    
    $fields = array();
    
    // Добавление полей формы в ассоциативный массив
    $fields["WMI_MERCHANT_ID"]    = "11111111111";
    $fields["WMI_PAYMENT_AMOUNT"] = "0.1";
    $fields["WMI_CURRENCY_ID"]    = "643";
    $fields["WMI_PAYMENT_NO"]     = "12345-005";
    $fields["WMI_SUCCESS_URL"]    = "http://site.ru/_PaySystem/w1/result.php";
    $fields["WMI_DESCRIPTION"]    = "BASE64:".base64_encode("Пополнение лицевого счета");
    $fields["WMI_EXPIRED_DATE"]   = "2019-12-31T23:59:59";
    $fields["Login"]       = "admin";
    
    //Сортировка значений внутри полей
    foreach($fields as $name => $val)
    {
    if (is_array($val))
    {
    usort($val, "strcasecmp");
    $fields[$name] = $val;
    }
    }
    
    // Формирование сообщения, путем объединения значений формы,
    // отсортированных по именам ключей в порядке возрастания.
    uksort($fields, "strcasecmp");
    $fieldValues = "";
    
    foreach($fields as $value)
    {
    if (is_array($value))
    foreach($value as $v)
    {
    //Конвертация из текущей кодировки (UTF-8)
    //необходима только если кодировка магазина отлична от Windows-1251
    $v = iconv("utf-8", "windows-1251", $v);
    $fieldValues .= $v;
    }
    else
    {
    //Конвертация из текущей кодировки (UTF-8)
    //необходима только если кодировка магазина отлична от Windows-1251
    $value = iconv("utf-8", "windows-1251", $value);
    $fieldValues .= $value;
    }
    }
    
    // Формирование значения параметра WMI_SIGNATURE, путем
    // вычисления отпечатка, сформированного выше сообщения,
    // по алгоритму MD5 и представление его в Base64
    
    $signature = base64_encode(pack("H*", md5($fieldValues . $key)));
    
    //Добавление параметра WMI_SIGNATURE в словарь параметров формы
    
    $fields["WMI_SIGNATURE"] = $signature;
    
    // Формирование HTML-кода платежной формы
    
    print '<form action="https://www.walletone.com/checkout/default.aspx" method="POST">';
    
    foreach($fields as $key => $val)
    {
    if (is_array($val))
    foreach($val as $value)
    {
    print $key.':<input type="text" name="'.$key.'" value="'.$value.'"/>';
    }
    else
    print $key.':<input type="text" name="'.$key.'" value="'.$val.'"/>';
    }
    
    print '<input type="submit"/></form>';
    Ответ написан
  • Какие существуют способы защиты стилей CSS?

    К сожалению нормальной защиты нет так как в броузерах chrome есть такая возможность как "Просмотр кода страницы" вот там и практически весь шаблон.
    Ответ написан