Site Tools


php_exa

PHP тест отправки почты из скриптов

<?php
// если была нажата кнопка "Отправить"
if($_POST['submit']) {
      // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменной $_POST['mess'] все аналогично
      $title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
      $mess =  substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
      $to =  substr(htmlspecialchars(trim($_POST['to'])), 0, 100);
      $from =  substr(htmlspecialchars(trim($_POST['from'])), 0, 100);
      // функция, которая отправляет наше письмо.
      var_dump(mail($to, $title, $mess, 'From:'.$from));
      echo 'Massage Sent';
}
?>
<form action="" method=post>

<p>Email test<p>
            <div align="center">
            <br />
            to
            <input type="text" name="to" size="40"><br />
            from
            <input type="text" name="from" size="40"><br />
            subject
            <input type="text" name="title" size="40"><br />
            message<br />
            <textarea name="mess" rows="10" cols="40"></textarea>
            <br />
            <input type="submit" value="Sent" name="submit"></div>
</form>

PHP тест загрузки файла

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Отправка файла на сервер</title>
 </head>
 <body>
  <form action="" method="post"
   enctype="multipart/form-data">
   <input type="file" name="file" id="file">
   <input type="submit" name="submit" value="Submit">
  </form>
 </body>
</html>

<?php
$uploadDir = "./";
if ($_FILES["file"]["error"] > 0){
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}else{
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
    if(file_exists($uploadDir . $_FILES["file"]["name"])){
        echo $_FILES["file"]["name"] . " already exists. ";
    }else{
        move_uploaded_file($_FILES["file"]["tmp_name"],
        $uploadDir . $_FILES["file"]["name"]);
        echo "Stored in: " . $uploadDir . $_FILES["file"]["name"];
    }
}
?>

PHP передача файла на загрузку

<?php
$file = 'constaj0_test.tar.gz';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>
<?php
session_start();

echo(session_id() . "\n</br>");
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>

Подключение по FTP и создание директории

<?php
$ftp_uml = "/testDir/public_html";
$id_uch_new = "123";
$dir_name = $ftp_uml . $id_uch_new; 
$ftp_server = "localhost";
$ftp_us = "user";
$ftp_pass = "pass";

$conn_ftp = ftp_connect($ftp_server) or die("Couldn't connect to ".$ftp_server.""); 
if($conn_ftp){
      $login_result = ftp_login($conn_ftp, $ftp_us, $ftp_pass);
	if($login_result) {
		ftp_pasv ($conn_ftp, TRUE);
		ftp_mkdir($conn_ftp, $dir_name);
	}
}
ftp_close($conn_ftp);
?>

304 Not Modified

$fn = './test.txt';

$headers = apache_request_headers();

if (isset($headers['If-Modified-Since']) && (strtotime($headers['If-Modified-Since']) > filemtime($fn))) {
      // Client's cache IS current, so we just respond '304 Not Modified'.
      header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($fn)).' GMT', true, 304);
      header('test: on');
} else {
      // Image not cached or cache outdated, we respond '200 OK' and output the image.
      header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($fn)).' GMT', true, 200);
      header('Content-Length: '.filesize($fn));
      header('test: off:' . strtotime($headers['If-Modified-Since']) . "  " . filemtime($fn));
      print file_get_contents($fn);
}

Перехват сигналов и трасировка до места нахождения

try{
declare(ticks = 1);
function sig_handler(){
             throw new Exception('TEST Exception');
}
pcntl_signal(SIGUSR1, "sig_handler");

while(1){
	include("sleep1.php");
	include("sleep2.php");
}

}catch(Exception $e){
	echo($e->getTraceAsString());
}

Рекурсивное получение количества файлов и общего размера по FTP

$connection = ftp_connect('server.ru');
if(ftp_login($connection, 'user', 'pass')){
    ftp_pasv($connection, TRUE); 
    $finishData = ftpGetRecursiveCountFile($connection, '/path/folder/');
    echo("Number of files: $finishData[count] </br>");
    echo("Size of megabytes: ". floor(($finishData['size'] + 4096) / 1048576) . "<br>"); #forTests: du . -a -b 
    ftp_close($connection);
}

function ftpGetRecursiveCountFile($ftpConnection, $path){
    $generalData = array('count' => 0, 'size' => 0);
    $dataFromFolder = ftp_rawlist($ftpConnection, $path);
    foreach($dataFromFolder as $node){
        $node = preg_replace('/ +/', ' ', $node);
        $arrayNode = explode(" ", $node);
        if($arrayNode[0][0] == 'd'){
            $tmpDataArray = ftpGetRecursiveCountFile($ftpConnection, $path . $arrayNode[8] . "/");
            $generalData['count'] += $tmpDataArray['count'];
            $generalData['size'] += $tmpDataArray['size'];
            $generalData['size'] += $arrayNode[4];
            ++$generalData['count'];
        }else{
            ++$generalData['count'];
            $generalData['size'] += $arrayNode[4];
        }
    }
    return $generalData;
}

Использование MemCache

header('Content-Type: text/html; charset=utf-8');

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Не могу подключиться");

$version = $memcache->getVersion();
echo "Версия сервера: ".$version."<br/>\n";

$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10) or die ("Ошибка при сохранении данных на сервере");
echo "Данные сохранены в кеше. (время жизни данных 10 секунд)<br/>\n";

$get_result = $memcache->get('key');
echo "Данные из кеша:<br/>\n";

var_dump($get_result);

Вывод количества процессов

var_dump(str_replace("\n", "<br />", shell_exec("ps aux")));

Создать куку

if(!isset($_COOKIE["beget"])){setcookie("beget", "begetok",  time()+60*60*24*90);}

Уберать роботов без куки

if(!isset($_COOKIE["beget"]) && !(stripos($_SERVER['HTTP_USER_AGENT'], 'yandex') || stripos($_SERVER['HTTP_USER_AGENT'], 'google'))){
        echo <<<HTMLCOOK
<html><head><script>function set_cookie(){var now = new Date();var time = now.getTime();time += 19360000 * 1000;now.setTime(time);document.cookie='beget=begetok'+'; expires='+now.toGMTString()+'; path=/';}set_cookie();location.reload();;</script></head><body></body></html>
HTMLCOOK;
        exit();
}

HereDoc

<?php
$str = <<<EOD
Пример строки,
охватывающей несколько строчек,
с использованием heredoc-синтаксиса.
EOD;

/* Более сложный пример с переменными. */
class foo
{
     var $foo;
     var $bar;

     function foo()
     {
         $this->foo = 'Foo';
         $this->bar = array('Bar1', 'Bar2', 'Bar3');
     }
}

$foo = new foo();
$name = 'МоеИмя';

echo <<<EOT
Меня зовут "$name". Я печатаю $foo->foo.
Теперь я вывожу {$foo->bar[1]}.
Это должно вывести заглавную букву 'A': \x41
EOT;
?>
Меня зовут "МоеИмя". Я печатаю Foo.
Теперь я вывожу Bar2.
Это должно вывести заглавную букву 'A': A

Пример подключения рандомных классов и использования __autoload

function __autoload($class_name)
{
    require_once 'dirClasses/'.$class_name . '.php';
}

$var = new someClass($_POST,$_GET,'someTemplate');
// соответственно, будет подключен dirClasses/someClass.php

подмена заголовков

                /* Эл. почта */
                       $address = "user@site";
                       $from     = "From: $address\r\n";
                       $reply_to = ($email) ? "Reply-To: $email\r\n" : "";
                      /* Текст сообщения, \n - перенос строки */
                       $mes = "Имя: $name, \nE-mail: $email, \nТема: $sub, \nТекст: $name, \n: $email, \n:$phone";
                      /* Отправка письма на email */
                       $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\n{$from}{$reply_to}");

Discussion

Constantin Conovaloff, 2015/06/19 17:43

Дамп

<?php
session_start();
echo("VVV ===== " . date('Y-m-d H:i:s',time()) ." ===== VVV\n");
echo("<br>");
echo("url: http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]\n");
echo("<br>");
echo("request:\n");
echo("<br>");
print_r($_REQUEST);
echo("<br>");
echo("\nget:");
echo("<br>");
print_r($_GET);
echo("<br>");
echo("\npost:");
echo("<br>");
print_r($_POST);
echo("<br>");
echo("\ncookie:");
echo("<br>");
print_r($_COOKIE);
echo("<br>");
echo("\nsession:");
echo("<br>");
print_r($_SESSION);
echo("<br>");
Constantin Conovaloff, 2015/06/26 15:23

php log to syslog

$msg = "CONCONMARK_260615_" . time();

openlog("phportal-cp", LOG_ODELAY | LOG_PID, LOG_LOCAL0);
syslog(LOG_WARNING, $msg);
closelog();

var_dump($msg);
Constantin Conovaloff, 2018/07/09 18:22

cross domain request

some.js
        $.ajax({
            method: "GET",
            url: "http://localhost/api/receipt/messages",
            headers: {"X-Client-Token": "00025bce-6591-a464-92ec-"},
            // beforeSend: function(xhr){xhr.setRequestHeader('X-Client-Token', '00025bce-6591-a464-92ec-');},
            contentType: 'application/json; charset=utf-8',
            data: {
                message: "Some",
            },
            success: function (data) { console.log(data); },
            error: function (data) { console.log(data); },
 
        });
You could leave a comment if you were logged in.
php_exa.txt · Last modified: 2013/12/11 18:13 by conovaloff

Page Tools