PHP

[PHP]IIS 7.5でFlushが効かない

Windows系サーバはPHPでFlushさせようと思っても、処理が完了するまで待っちゃうのがデフォルト動作っぽい。
それをなおすには、C:\Windows\System32\inetsrv\config\applicationHost.configを修正する。
このファイルを修正するのは、FastCGIが最初から入っているサーバ。(2003とかはNG)

FastCGIをマッピングしている行を探して
-----こんなん------------------------->
<add name="php_via_fastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\php-5.5.12\php-cgi.exe" resourceType="Either">
<-----こんなん-------------------------

responseBufferLimit="0"を追加する。

-----追加後------------------------->
<add name="php_via_fastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\php-5.5.12\php-cgi.exe" resourceType="Either" responseBufferLimit="0" />
<-----追加後-------------------------

Windows共有フォルダにPHPでfailed to open stream: Invalid argument

Windows共有フォルダに対して、ファイルをcopyしたいときは、の手順

# ためした環境はIIS6なので、IIS7だとちょっとちがうかもしれない。

■ フォルダ作成
・共有にするフォルダつくって、共有用アクセス権よみかき可能設定
・セキュリティの方のアクセス権もよみかき可能設定

■ BATファイル実行用設定
c:\windows\system32\cmd.exeのセキュリティに、IIS実行ユーザに対して実行権限を付与

■ BATファイル用意

NET USE [共有フォルダUNCパス] /DELETE (←いらないかも)
NET USE [共有フォルダUNCパス] [パスワード] /USER:[共有先PC名]\[ユーザ名]
copy /Y %1 %2

■ php

$fp = fopen([共有フォルダUNCパス] . "aaa.txt", "w");
fwrite($fp, "sample");
fclose($fp);

exec("cmd.exe /c copy.bat [コピー元ファイル名] [共有フォルダUNCパス", $output, $status);


ざっくりメモ書き。

PHPでエラーすると、IISの500エラーが表示されてしまう

php.iniで、以下の設定をしているのにもかかわらず

error_reporting=E_ALL
display_errors = ON
PHPの詳細エラーが表示されず、IISの内部エラー(500)が発生してしまうときは
・error_log
・log_errors
をチェック。

ログを出力しない設定にして(error_log未設定)
log_errors=ONにしていると
ログが出力されないから(?)内部的にエラーとなるっぽい。
特にエラーログいらないってときは、log_errorsをOFFしておくとよい。
しかしパラメータ名がまぎらわしい・・・。

JavaScript内でPHPを使ったり

変数の中身を動的にPHPで書きだすとかやっているJavaScriptをHTMLで使いたい!
ってときの話。
全然わからん説明乙。

JavaScriptだと動作させているPCのローカルタイムしか時間とれないので
PCの時間が正しく設定されてないと困るんだよ・・・!
だから、PHPを動作させているサーバの時間をとるよ!
って時につかったりするといいというサンプル。

HTMLでscript typeをtext/javascriptにしてるのに、ソースはPHPという。
簡単だけど、気づいた人はすごいな。インターネッティング本当にばんざい。

・HTML

<html>
<head>
    <script type="text/javascript" src="js.php"></script>
</head>
<body>
(略)

・js.php

<?php
       require_once("date.php");
?>

var now = <?php echo $date; ?>;
alert(now);

・date.php

<?php
      $date = date("Y年m月j日 H時i分");
?>

[PHP]WEBサイトから日本語ファイル名でダウンロード

日本語のファイル名のついたPDFをダウンロードするのに
普通にサーバに日本語ファイル名.pdfを置いて、HTMLにリンク貼って
とかやってたら

  • 「http://XXXXXX/日本語ファイル名.pdf」をブラウザで指定すると、404エラー
  • URLエンコードしてファイルを指定するとダウンロードはできるけど、ファイル名がエンコードされた名前のまま
  • 半角英数字ファイルならおk

てことになった。
これを回避するのに、以下のようなHTTPヘッダを送信するスクリプトを使った。

<?php
    header('Content-type: application/pdf');    // mimeタイプ
    header('Content-Disposition: attachment; filename=日本語ファイル名.pdf');
    readfile('日本語ファイル名.pdf');   // 実際のファイルを読み込んで標準出力
?>

WEBページから何らかのファイルをダウンロードするときに
スクリプトを通してダウンロードさせてるところもよく見かけていたので
「これはダウンロードのログを取ったりしてるんだろう」と思っていた。
まあきっとそういう用途もあるんだろうけども。

[PHP]PHPからPerlを引数つきで実行する

PHPソース(test.php)

   <?php

        $str = "./test.cgi prm1";
        exec($str, $output);

    ?>

Perlソース(./test.cgi)

    #!/usr/bin/perl

    use strict;

    open(OUT, ">./test.txt");
    print OUT $ARGV[0];
    close(OUT);

test.phpとtest.cgiを同列に置いて、test.phpを実行すると
「prm1」が書きこまれたtest.txtが生成される。

[PHP]ファイルアップロード時の設定

ファイルアップロードの仕組みをいれたのに動かないってときは
ファイルサイズの設定が間違っていることが多々ある&設定してもすぐ忘れる
のでメモ。

【動作環境】Linux Apache

以下の項目の設定をアップロードするファイルより大きい値に変更する必要がある
php.conf (/etc/httpd/conf.d)

  • LimitRequestBody
    comment outもできるみたい。した場合は完全にphp.iniに依存。

php.ini (/etc)

  • memory_limit
  • post_max_size
  • upload_max_filesize

上記を変更したときはapacheを再起動(httpd restart)する必要あり。

[PHP]Headers already sent....

<?php
session_name("ses_name");
session_start();
?>

ってファイルの1行目から書いてるのに
「headers already sent」とエラーするときは
ファイルの文字コードがUTF-8だったら注意!
BOMがついてると、上記エラーになるよ!

BOM!またおまえかッ!!

PHPではしご高たつ崎

DBの文字コード:UTF-8
PHPファイル:Shift-JIS
動作環境:Windows

とかいう環境で以下のような文字を表示すると文字化けする。
mb_convert_encoding($str, "SJIS", "UTF-8")はかましている。
・はしご高(髙)
・たつ崎(﨑)

DBから読み込み→Shift-JISで表示するために、文字コード変換する際

mb_convert_encoding($str, "SJIS-win", "UTF-8");

にすると文字化けしなくなるらしい。
なにこれちょう便利!

補足追記)

DBがUTF-8の文字コードでたとえば「はしご高」などの、IBM拡張文字が格納されているときは
Shift-JISだとそんな領域ないので、表示できません^q^→文字化けするってこと。
Shift-JISだと表現できないけど、SJIS-win(拡張文字サポート)ならおk!てことのようだ。

PerlでJcodeでEncodeする時などはCP932とかを指定するのかな(自信なし)

# あとから自分で読んでも全然わかんない記事とかうんk

 

Shift-JISでUTF-8なPHPファイルを表示すると「・ソ」と出る件

UTF-8には「UTF-8」と「UTF-8N」がある。
違いは、BOM(Byte Order Mark)があるかないか。「UTF-8」がBOMつき。

BOMつきUTF-8でPHPファイルをつくって、Shift-JISのhtmlで読み込むと「・ソ」などと表示される。
これはUTF-8のファイルの先頭にBOMのあかし「0xef, 0xbb, 0xbf」がついてしまうため。
「UTF-8」を「UTF-8N」で保存しなおすと正しく表示される。

保存しなおすことができるエディタはTeraPadをつかってみた。大丈夫くさい。

バイナリエディタを使える子は、バイナリエディタでファイルを開いて先頭3バイトを除去すると幸せになれるよ!

その他のカテゴリー

最近のトラックバック

2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ