トップページphp
1001コメント318KB

【PHP】下らねぇ質問はここに書き込みやがれ 70

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2008/06/25(水) 10:14:08ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは970が立ててください立たなかった場合は980よろ

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。

◆質問後の注意
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくは質問時のトリップをつける事。
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0876nobodyさん2008/07/14(月) 17:19:36ID:???
>>875
コードをincludeしたいならサーバ内のパスでやらないと無理。
http〜は普通絶対パスとは言わない。単なるURL(URI)。
includeするとスクリプトのコードではなく実行結果が返されるよ。
08778642008/07/14(月) 17:34:47ID:???
>>876
うまくいきました。本当にありがとうございます。

>includeするとスクリプトのコードではなく実行結果が返されるよ。
そうなんです。ためしにhoge.phpの<?php ?>はずしてみたら結果だったので、phpの状態で読み込まれていないなぁと思っていたのです。

とても基本的なことだったので、どこのサイトにも書いてなかったのですね。

>>866
せっかく書いてくださったのに、申し訳有りません。
試す前に解決してしまいました。

今回はありがとうございました。
0878nobodyさん2008/07/14(月) 17:38:37ID:???
>>877
http://jp2.php.net/include/
ファイルが読み込まれるときには、読み込まれるファイルの先頭で PHPモードを抜けてHTMLモードになり、
最後に再びPHPモードに戻ります。 このため、読み込むファイル中のPHPコードとして実行する必要があるコードは、
有効なPHPの開始タグおよび終了タグで括る必要があります。

"URL fopenラッパー"が 有効になっている場合(デフォルト設定では有効です)、ローカルなパス名 の代わりに
URL(HTTP経由)を用いて読み込むファイルを指定することが可能です。 URLで指定されたサーバがファイルを
PHPコードとして解釈することが 出来る場合には、HTTP GETを使用してURLリクエストに引数を指定することが
出来ます。これはファイルの読み込み云々やスコープの継承とは関係なく、 ただ単純にスクリプトがリモートの
サーバで実行されて結果がローカルの スクリプトに読み込まれる、というだけのことです。
08798642008/07/14(月) 17:45:54ID:???
>>878
そのページ見ていました。
最初読んだ時、何のことやらさっぱり意味が分からなかったんですよね。
今だと、なんとなく分かります。

その記述の少し上の「基本的なinclude()の例」で例題として、うまく行っている例が出てるんですね。
だから「考え方は間違ってない。何かやり方が間違っているんだろう。」と漠然と思っていました。
0880nobodyさん2008/07/14(月) 17:47:53ID:???
includeやらfileやらのURLラッパーは、WebProg初心者には混乱のもとだよな・・・
0881nobodyさん2008/07/14(月) 17:58:50ID:???
>>879
>URLで指定されたサーバがファイルをPHPコードとして解釈することが 出来る場合には、
>HTTP GETを使用してURLリクエストに引数を指定することが 出来ます。
.phpをPHPとしてパースするサーバならば「GETで変数を渡せる」というだけ。
そのスクリプトのコードを読み込めるわけではない。
逆に言うとそれができるなら、その自分が公開しているアプリや、yahooやgoogleなんかのコードも
外部に丸見えになるってことだぞ。
0882nobodyさん2008/07/14(月) 20:37:04ID:cWY3QFlw
質問させてください。

ImageMagickを使ってGIF画像をトリミングしようとしています。(画像の上下から一定の高さ分ずつ削った画像を作ろうとしています)
最初Imagickエクステンション(というのでしょうか)を使って
----------------------------------------------------------
$im = new Imagick(画像ファイル);
$im->chopImage(0,削りたい高さ,0,0);
$im->chopImage(0,削りたい高さ,0,残したい高さ);
$im -> setImageExtent($im->getImageWidth(),残したい高さ);//※1
---------------------------------------------------------
のような感じで行って、上手く行きました。
まず、画像の上下を削り、トリミングをしたときに残る、画像の余白を、※1の処理で、削除する作業を行っています。

さて。ロリポップ上で、上記の処理を行う必要があるため、
コマンドで処理を行う必要があり、上記のプログラムを書き直す必要が出てきました。

そこで、下記のような感じで行ってみたのですが、
-----------------------------------------------------------
convert -gravity center -crop 横x縦+0+0 元画像ファイル 出力画像ファイル
-----------------------------------------------------------
Imagickエクステンションの時に行っていたのと同様に、
画像に余白が出来ます。

しかし、その余白を消す方法が見つかりません。
-geometry (縮小されてしまう)
-trim   (変化無し)
-resize  (縮小されてしまう)
など、いろいろ試してみたのですが、
使い方が悪いのかもしれませんが、上手く行きません。
よい方法はありませんでしょうか。よろしくお願いします。
0883nobodyさん2008/07/14(月) 20:39:15ID:???
申し訳ありません。あげてしまいました。
0884nobodyさん2008/07/14(月) 20:42:17ID:???
>>12が正しいテンプレです
質問者はあげてIDを出さないと回答してもらえません
08858822008/07/14(月) 20:50:15ID:cWY3QFlw
>>884
早速教えていただきありがとうございます。

ぐだぐだで失礼しました。

環境ですが
サーバーは、前述のとおりロリポップを予定していますが、
現在はまだ自前のWinXpSP2+xampp(16.6a)で動作させております。

PHPは5.2.5
ImageMagickは6.4.1-Q16

となっております。
0886nobodyさん2008/07/14(月) 22:10:07ID:???
PHPじゃなくてImageMagickの質問だと思うんですが?
0887nobodyさん2008/07/14(月) 22:15:08ID:???
ImageMagickはPHPじゃないということですか?
0888nobodyさん2008/07/14(月) 22:20:10ID:???
Same "オフィスはWindowsじゃないということですか?"



0889nobodyさん2008/07/14(月) 22:57:34ID:???
>>887
http://ja.wikipedia.org/wiki/ImageMagick
0890nobodyさん2008/07/14(月) 23:07:40ID:BjvrU7ew
質問させて下さい。
PHP5を使っています。
PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません
<INPUT maxLength=20 name=id value="">
このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」
を取得したいのです。
全文に対して繰り返し取得したいのでpreg_match_allを使っています。

preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs )
このように書いたのですがヒットしてくれません。
ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが
文字列に関してはどのようにすればよいのでしょうか?
アドバイス頂ければ幸いです。
宜しくお願い致します。
0891nobodyさん2008/07/14(月) 23:47:05ID:???
>>890
正規表現スレへいってらっしゃい
08928902008/07/15(火) 00:10:30ID:???
>>891
レスありがとうございます。そちらへ行かせてもらいます。
0893nobodyさん2008/07/15(火) 02:56:06ID:???
893
0894nobodyさん2008/07/15(火) 08:53:55ID:3TGKEqvg
どこでお聞きしたらよいか分からず、ここでお聞きします。
適切なスレがありましたら、ご誘導下さい。

httpsは、httpに比べてデータが暗号化されてパイプを流れると聞いたのですが、
それは本当でしょうか?
httpsから始まるサイトを閲覧して、ブラウザのソースを表示を押したところ、
ソースが丸見えでした。ソースというのは、htmoソースのことです。

そのサイトのセキュリティーのせいなのか、それとも暗号化されるのは別のデータなのか?
そこがよく分かりません。

ご教授下さい。
0895nobodyさん2008/07/15(火) 08:55:35ID:???
>>894
サーバからブラウザまでの通信経路において暗号化してるだけで、
ブラウザがユーザーに向けて表示する際には復号化されてるから、
ソースを見たら平文になってるだけだよ。。
パケットキャプチャして調べてみなよ。

0896nobodyさん2008/07/15(火) 09:39:58ID:3TGKEqvg
>>895
ありがとうございます。
ということは、ブラウザが暗号化するソフトで、
私が見たのはブラウザの外の部分を見ていたので、平文だったけど、
ブラウザの内側は暗号化されているということなんですね。

得心しました。ありがとうございました。
0897リュ.マヴジュダ.レァュビゥ.ジィゥヴ2008/07/15(火) 12:57:39ID:???
質問ですが、ヌル文字?

\0 で テキストで打てば%00ですよね?

\x00 って何に変換されるんですか?
0898nobodyさん2008/07/15(火) 13:02:29ID:???
http://e-words.jp/p/r-ascii.html
0899nobodyさん2008/07/15(火) 13:34:15ID:???
\0は8進数の0、\x00は16進数の0
0900X2008/07/15(火) 14:33:07ID:???
クリプトさせたデータを複合化するにはどうしたらよいですか?

<?php
$x = '12345678';
$data = crypt($x,'dc');
echo $data;
?>
これでクリプトさせたデータを複合化したいです。
0901nobodyさん2008/07/15(火) 14:38:08ID:???
>>900
cryptは1方向ハッシュ
0902nobodyさん2008/07/15(火) 15:24:36ID:???
つうか答えなくていいよ
>>897>>900は同じやつだろ
名前もふざけてるしメル欄も釣りとしか思えない
0903nobodyさん2008/07/15(火) 15:35:30ID:???
2ch初心者じゃない?
0904nobodyさん2008/07/15(火) 20:04:35ID:l2rQTsjG
PHPをCGIとして動作させたときに、POSTがうまくいきません。

 OS: CentOS 5 Linux
 PHP: PHP 5.1.6 (cli) (built: May 24 2008 14:07:53)
 Apache: Apache/2.2.3 Server built: Jan 15 2008 20:33:30

今までmod_phpでApacheのモジュールとして動かしていたPHPプログラムを、
レンタルサーバを使う関係でやむを得ずCGIとして動かすことにしました。
まずはテスト環境を本番サイトに合わせて変更。

LoadModule php5_module modules/libphp5.so
AddHandler php5-script .php
AddType text/html .php

をコメントアウトしてモジュールとして動作するのをやめ、新たに

Options ExecCGI
AddHandler cgi-script .php

らを追加してApacheを再起動。
ソースコードの冒頭に #!/usr/bin/php を追加して、実行権限も与え、アクセスしてみると
ちゃんと表示できたので、楽勝楽勝なんて思っていたらここからドツボへ。

プログラム中でフォームからPOSTで受け取ったユーザ名とパスワードを使ってサービスに
ログインさせる部分があるのですが、ちゃんとフォームに入力してPOSTしているのに
$_POST["key"] が null となっていてちゃんと処理が進んでいません。

(長いので続きます・・)
09059042008/07/15(火) 20:05:12ID:l2rQTsjG
(904つづき)

サンプルプログラムとして、

#!/usr/bin/php
<?php
if(isset($_POST["posttest"])){
 printf($_POST["posttest"]);
} else {
 printf("null");
}
<html><body>
<?php
<form action="post.php" method="post">
<input type="text" name="posttest"><input type="submit" value="submit">
</form>
</body></html>

ここまで単純なプログラムを書いても、どうやっても null です。
超長文でほんとお恥ずかしいですが、アドバイスお願いします。
0906nobodyさん2008/07/15(火) 20:27:23ID:???
<html><body>
<?php
09079042008/07/15(火) 20:52:14ID:???
失礼、そこはここへ書き込む際のわたしの入力ミスです。
実プログラムはちゃんと正しい閉じ括弧になっています。どうかスルーしてください。

文法エラーなど、ログに明らかな原因の出る状況ではありません。
手がかりが無く困っています。
PHPの本家のマニュアルで、CGIとして動作させる場合の説明も何度も読み直しましたが
禁忌をおかしているようには見えません。
0908nobodyさん2008/07/15(火) 20:55:59ID:???
毎回思うんだが
再現できない状態のコードを投稿するなよ
書き込む前にちょっと確認するだけじゃないか

そんな事もできないからロクに(ry
0909nobodyさん2008/07/15(火) 21:01:12ID:???
>907
意図どおり動かないソースを、改変せずそのままコピペするのを勧める。
じゃないと検証しようもないよ
0910nobodyさん2008/07/15(火) 21:04:10ID:???
>>907
cgiが使えるxreaで検証してみたが別に問題ないけど?
エラーでてる様子がないから>>907のコードコピペしたときの
全角スペースによる問題ではないと思うけど
09119102008/07/15(火) 21:05:02ID:???
>>907じゃなくて>>905のコードね
0912nobodyさん2008/07/15(火) 22:05:53ID:???
cygwinにphp-4.4.7.tar.gzを入れて使っています。
FTP関数を使おうとすると そんなのねぇよ的なエラーになってしまいました。
おそらくPHP をインストールする際に --enable-ftp をしなかったせいだと思うのですが、
既にインストールされている環境でFTPを有効できるのでしょうか?

もし再インストールが必要であれば、
phpinfoで見れるConfigure Commandに--enable-ftpを追加したコマンドでインストールすれば大丈夫でしょうか?
また、php.iniやhttpd.confは上書きされてしまうのでしょうか?

よろしくおねがいします。
0913nobodyさん2008/07/15(火) 22:52:37ID:???
普通は設定ファイルはアプリケーション削除後残すことがおおいが
Apache、PHPがどうするかはシラネ
設定ファイルだけバックアップとって自分でやってみれよ
ていうかcygwinでやるぐらいならVM入れてlinuxでも入れとけって話ですね
0914nobodyさん2008/07/15(火) 23:03:03ID:tej4dQ8Y
既出でしたら案内していただけると助かります。

apache経由でpostgresに接続することができません。
すみませんが手元に実機がないため設定等すぐに確認できません。

centos4.5
apache2.0.52 デフォルトで入れてました。
postgresバージョン忘れてしまいました。ソースからインストール。
perl5.8.5 デフォルトで入れてました
DBI使用
apacheとpostgresは同一機上で動作しています

症状
・サーバ機内で直接スクリプトを実行した場合はDB接続できます
・PCブラウザ等のリクエストを受け取った場合、以下の2通りの現象が起こります
1.apachectlからの起動ではDB接続に失敗
2.httpdからの起動ではDB接続に成功

ahacheのerror.logには、「Refused permission」(だったかな?)という
権限が無いと思われる内容とDB接続を行っている行番号が残っています。

httpd.confのUserやGroupをpostgresやスクリプト所有者に設定してみましたが、症状は変わりませんでした。
ps -auxに出る実行ユーザはどちらもhttpd.confで設定したユーザとなっています(親プロセスはroot)。
apachectlで起動しているhttpdのフルパスは、検証に使用しているhttpdを指しています。
このため同じものだと思うのですが、動作結果が異なるのはどうしてだろうと悩んでいます。
またDB接続時の関数の直後にor dieやprint出力を書いても、接続に失敗した場合は出力されません(ファイル出力も同様)。

アドバイスや手がかりになりそうな情報がありましたら宜しくお願いします。
09159122008/07/15(火) 23:05:33ID:???
>>913
そうですね、やってみます。
マシンがしょぼいのでVMは無理なんです(T_T)
0916nobodyさん2008/07/15(火) 23:06:12ID:tej4dQ8Y
すみませんスレ違いでした
0917nobodyさん2008/07/16(水) 00:15:27ID:sBFLtzFG
redhat9 がOSです。

php-4.2.2-17.2jaがRPMでインストールされているのですが、
バージョンアップをしなければいけなくなりました。

手順ですが

rpm -e でphpを削除して、php4.4.6をconfigure → make → make install

しても大丈夫でしょうか?
今、動いているphpプログラムが動かなくなるか不安です。
0918nobodyさん2008/07/16(水) 00:39:17ID:???
大丈夫だと思います。
あとlinuxのエスパースレで聞いたほうがいいと思います
0919nobodyさん2008/07/16(水) 00:45:45ID:sBFLtzFG
>>918
サンクス湖
0920nobodyさん2008/07/16(水) 01:21:22ID:gY/N3cCH
php.iniの設定で「date.timezone」というものがあります。
      (設定一覧:http://manual.xwd.jp/timezones.html
たとえば、この設定が「Africa/Abidjan」と設定されていると、time関数の戻り値が日本時間(Asia/Tokyo)より9時間ずれてしまいますので、日時を表示する際に不都合が生じてしまいます。
    time()+9時間
として現在対応しておりますが、それだと「Asia/Tokyo」や「Antarctica/Casey」と設定されている際に不都合(日時のずれ)が生じてしまいます。

if(ini_get('date.timezone') =='Asia/Tokyo'){
$time = time();
}elseif(ini_get('date.timezone') =='Africa/Abidjan'){
$time = time() + 9時間;
}elseif(ini_get('date.timezone') =='省略'){
     〜以下、省略〜
というように対応するしかないのでしょうか・・・・orz.



php.iniの設定「date.timezone」の影響を受けない日時を返す関数などありますでしょうか?
ご教授よろしくお願いいたします。
0921nobodyさん2008/07/16(水) 02:19:26ID:???
gmdate()
0922nobodyさん2008/07/16(水) 02:36:46ID:f7vcectw
>>901
>>900>>902は盛り上げようと必死な自演です気にしないでいてください
09232022008/07/16(水) 11:15:04ID:zBMhaK5C
>908-909
本当にすみません。
以下はいま動作確認に使ったものを一切改変せずそのままコピペしました。
なんとGETもちゃんと扱えていませんでした。ファイル名はpost.phpです。アドバイスください。

#!/usr/bin/php
<?php
print "Method is " . $_SERVER['REQUEST_METHOD'] . "<br />";
if(isset($_POST["test"])){
print $_POST["test"];
}elseif(isset($_GET["test"])){
print $_GET["test"];
}else{
print "both null" . "<br />";
}
?>
<html>
<body>
<hr />
<?php
print "POST: " . count($_POST) . "<br />";
print "GET: " . count($_GET) . "<br />";
?>
<hr />
<!--<form action="post.php" method="post">-->
<form action="post.php" method="get">
<input type="text" name="test">
<input type="submit" value="submit">
</form>
</body>
</html>
09249232008/07/16(水) 11:18:34ID:zBMhaK5C
あれ・・番号がおかしく・・
>>923=>>904です。

>>910さんが、PHPをCGIとして動かせるサーバで動作確認できたということですので
わたしが>>904でやった、PHPをCGIとして動かすためのサーバ設定に不備があるのかも
知れません。

PHPをCGIとして動作させるためのサーバ設定はおそらく、このスレの範疇外ですよ・・ね・・
0925nobodyさん2008/07/16(水) 11:38:24ID:???
http://ml.php.gr.jp/pipermail/php-users/2006-April/029464.html
解決してないが似たような。
0926nobodyさん2008/07/16(水) 11:41:47ID:???
phpinfo() 実行して、variables_order どうなってる?
09279232008/07/16(水) 13:45:18ID:zBMhaK5C
>>926
variables_order => EGPCS => EGPCS
となっています。環境変数もPOSTもGETもCookieも有効ですよねコレ・・
http://paruo.net/php_cgi_test/phpinfo.txt
にテストサーバのphpinfoの全出力をアップしてみました。

ちなみに、Fedora9で動作しているサーバ(phpinfo.txtを置いたサーバ)で試してみても、
テストサーバ(CentOS5)と同じくPOSTもGETも使えていないようです。

http://paruo.net/php_cgi_test/phpinfo.php
はFedora9サーバのphpinfo
http://paruo.net/php_cgi_test/post.php
はFedora9サーバに置いてみたpost.phpです。

やはりどうも私がPHPをCGIとして動作させるために行った設定に問題があるのでしょうか
0928nb2008/07/16(水) 14:30:26ID:D6JBW3d6
入力した値が3の倍数のときに、10個先の3の倍数までをすべて足していく
プログラムを作っているけど、何が間違っているか教えてケロ☆

/* kadai2.c */
#include <stdio.h>

main()
{
int seisu, gokei, handan;
gokei=0;

printf("整数を入力して下さい\n");
scanf("&d", &seisu);

handan=seisu%3;
if(handan=0)

for(seisu=1; seisu<=10;)
{
seisu=seisu+3;
gokei=seisu+gokei;
printf("合計=%d\n",gokei);
}

else
printf("できません\n");

return 0;
}
0929nobodyさん2008/07/16(水) 14:30:48ID:???
$_REQUESTはどんな感じ?
ついでに$_SERVER['REQUEST_URI']も表示させてみてよ。
0930nobodyさん2008/07/16(水) 14:31:17ID:???
>>928
スレタイ
0931nobodyさん2008/07/16(水) 14:41:41ID:???
>>927
ちょっと環境作ってみたよ。
phpはよく知らないんだが、
php -v で
PHP 5.x.x (cli) と出てないか?
うちでビルドしたら(cli)版と(cgi)版ができて、cgi版のほうだと普通に$_POSTもセットされてる。
0932nobodyさん2008/07/16(水) 14:49:37ID:???
>テストサーバのphpinfoの全出力をアップしてみました。

ってまあ、これtext/plainだからcli版なんだろうな。
09339232008/07/16(水) 15:08:14ID:zBMhaK5C
>>929
http://paruo.net/php_cgi_test/post.php

print '$_REQUEST[\'REQUEST_URI\']: ' . $_REQUEST['REQUEST_URI'];
を追加して確認してみましたが、空のようです。

>>931-932
904にも書いてみましたが、
php -v
PHP: PHP 5.1.6 (cli) (built: May 24 2008 14:07:53)

で、ご指摘の通り(cli)です。なんと、まさかバイナリが違っていたということでしょうか。
いまからCLIについてググります。
このバイナリはRPMで導入したもので、PHPのバイナリに色々種類があるというのは
不勉強のためまったく知りませんでした。
0934nobodyさん2008/07/16(水) 15:52:07ID:???
http://paruo.net/php_cgi_test/phpinfo.php
Server API => Command Line Interface
これじゃ無理だな。
0935nobodyさん2008/07/16(水) 16:00:45ID:???
まあ他の言語のcgiと同様にパースするコード入れて自前で何とかすれば何とかなるんだろうけど。
09369232008/07/16(水) 17:04:40ID:zBMhaK5C
みなさんのお陰で万事うまくいきました。
同じ道を通るかもしれない私のような初心者への道標として簡単に報告します。

Cent OS 5でデフォルトで提供されるPHPのRPMにもCGI用のバイナリは含まれていました。
なければ自分でビルドするつもりでしたがその必要もなかったようです。

# rpm -ql php-cli | grep -i cgi
/usr/bin/php-cgi
# /usr/bin/php-cgi -v
PHP 5.1.6 (cgi-fcgi) (built: May 24 2008 14:03:19)

次にPHPスクリプト中のパスをphp-cgiに書き換えて実行すると、今度は
Security Alert! The PHP CGI cannot be accessed directly.
のような警告が出ましたが、それは
php.ini を cgi.force_redirect = 0 のように変えて解決しました。

このオプション自体はどうもApacheでは推奨されないようですが、
これでともかく動作確認ができます。

ほんとうに、ありがとうございました。勉強になりました。
0937nobodyさん2008/07/16(水) 21:35:19ID:5rxq4nnT
質問お願いします。

区点コードから実際の文字に自動で変換したいのですが、なにか良い方法はないでしょうか?
区点コードは4ケタの数字です。

よろしくお願いします!
0938nobodyさん2008/07/16(水) 21:57:12ID:???
>>937
http://www.google.com/search?hl=ja&safe=off&q=%E5%8C%BA%E7%82%B9%E3%82%B3%E3%83%BC%E3%83%89+%E5%A4%89%E6%8F%9B&lr=
09399372008/07/16(水) 22:04:49ID:5rxq4nnT
>>938

レスありがとうございます。
ですが、PHPから利用できるライブラリや関数を教えていただきたいのですが・・・

わかりずらい質問で申し訳ありません。
0940nobodyさん2008/07/16(水) 22:08:26ID:???
>>939
http://www.google.com/search?hl=ja&safe=off&q=%E5%8C%BA%E7%82%B9%E3%82%B3%E3%83%BC%E3%83%89+%E5%A4%89%E6%8F%9B+php&lr=
0941nobodyさん2008/07/16(水) 22:58:09ID:???
packあたりを使えばいけたはず
09429372008/07/16(水) 23:37:35ID:5rxq4nnT
レスありがとうございます。

いろいろ調べてみたのですが、

http://oshiete1.goo.ne.jp/qa2053815.html?ans_count_asc=2

こちらで、
「Unicode⇔JIS区点コード間は必ずなんらかの変換表が必要になります。」
とあるのですが、
やはりテーブルが必要なのでしょうか?

また、そうであれば、そのテーブルはどこから入手できるのでしょうか?

何度も申し訳ありませんが、よろしくお願いします。
0943nobodyさん2008/07/17(木) 07:21:02ID:???
コードから文字に変換するだけならいらん
0944nobodyさん2008/07/17(木) 08:52:06ID:???
>区点コードから実際の文字に自動で変換したいのですが
>こちらで、
>「Unicode⇔JIS区点コード間は必ずなんらかの変換表が必要になります。」
>とあるのですが、

どっちなんだよ
0945nobodyさん2008/07/17(木) 09:46:42ID:???
実際の文字の文字コードや、実行する環境は?
JISがつくコード体系同士なら(EUC含む)計算だけでできる
JIS系からunicodeへは表が必要だが、通常OSやライブラリが持ってるからいらん。
09469372008/07/17(木) 10:10:00ID:XimHmCfs
みなさん、レスありがとうございます。

どうも自分のやりたいことが整理できていなかったみたいで・・・
自分のやりたいことは、たとえば、「1601」から「亜」に変換するということです。

開発環境はWindowsなのですが、
これを実現するには、どうすればよいでしょうか?

何度もすみませんが、よろしくお願いします。
0947nobodyさん2008/07/17(木) 10:35:30ID:???
区を上位バイト、点を下位バイトとして
0x2020 足してやりゃJISになるよ
亜が1601 なら、16区01点で
(区 + 0x20) * 0x100 + 点 + 0x20 → 0x3021

JISになればあとはどうにでもなるだろ
0948nobodyさん2008/07/17(木) 12:22:17ID:???
$KIN = "\x1b\x24\x42";
$KOUT = "\x1b\x28\x42";
$n = 1601; // 区点コードの「亜」

$s = pack("C2", (int)($n / 100) + 0x20, $n % 100 + 0x20);
print mb_convert_encoding($KIN.$s.$KOUT, "SJIS", "JIS"); // SJISで「亜」

やりたいことがよくわからんから適当に。
こっから自分の都合で取り込んでみて。
0949nobodyさん2008/07/17(木) 12:24:13ID:tFuEM5Bx
環境もスクリプトもUTF-8で統一し、これまで問題なくきたのですが
CSVファイル(エクセルから吐き出されたもの)を読み込んで
trim(mb_convert_encoding($list[$i], "UTF-8", "SJIS-win,SJIS"));
で変換後に表示させるとマルチバイトの一部が文字化けしてしまい
どうすれば良いのか分らないので教えてもらえないでしょうか?

ちなみにCSVの読み取り処理をする前にCSVの文字コードをエディタで
UTF-8に変え、mb_convert_encodingさせない場合は文字化けしません。
0950nobodyさん2008/07/17(木) 12:26:24ID:???
どの文字がどう化けるのかも書いてくれると話が早いんだが。
0951949 2008/07/17(木) 12:35:30ID:tFuEM5Bx
>>950
例えばCSV上で 北区田端 という住所の部分を
mb_convert_encodingかけPHP出力すると k区田端 と表示されます
0952nobodyさん2008/07/17(木) 12:44:00ID:???
k はSJISの「北」の2バイト目だね。
最終的にSJISになってるの?
0953nobodyさん2008/07/17(木) 12:45:03ID:???
北の前の文字のせいか、北そのものが半分削られてんじゃないかなあ
0954949 2008/07/17(木) 12:56:53ID:tFuEM5Bx
>>952
最終的にはUTF-8です

>>953
どうやらそうのようです
先ほど気がついたのですが、マルチバイト文字すべての先頭文字が
削られているような感じになっています。
(例)
フッサール → tッサール
1キョウ → Pキョウ
0955nobodyさん2008/07/17(木) 12:59:31ID:???
BOM
0956949 2008/07/17(木) 13:13:24ID:tFuEM5Bx
>>955
あたりのようです
var_dumpすると表示されているマルチバイト数+3になっていました
0957nobodyさん2008/07/17(木) 13:18:01ID:???
典型的な切り分けのできてない質問だな。
CSVの読み取りがきちんとできてない可能性と
trim(mb_convert_encoding($list[$i], "UTF-8", "SJIS-win,SJIS"));
の処理でおかしくなっている可能性があるので、
まずは$list[$i]の中身がどうなってるか確認するもんだろ。
0958nobodyさん2008/07/17(木) 14:11:21ID:tZP0UVf1
ファイル読み込み時に"r"を指定した場合は
ロックする必要がないのでしょうか?

$fp = fopen("aaa.txt", "r");
flock($filepointer, LOCK_EX);←必要?

複数人に使われるサイトを想定しております。
OS : CentOS4
PHP4.1.13
0959nobodyさん2008/07/17(木) 14:15:40ID:???
リードでロックする必要があるのかよく考えてみよう
0960nobodyさん2008/07/17(木) 14:17:12ID:???
>>958
書き込み途中の半端な状態のファイルを読みたくなければロック必要。
LOCK_EXはやりすぎでLOCK_SHで十分。
0961nobodyさん2008/07/17(木) 14:20:21ID:tZP0UVf1
>>959 >>960
ありがとうございました。

書き込まれない静的なファイルを読み込むだけなので
ロックせずに実装します。
助かりました
0962nobodyさん2008/07/17(木) 14:38:39ID:???
SQLを絡ませた質問です。
$query = "select * from table";
$res = mysql_query($sql);

で返ってきた$resから列名(id, name, addressなど)を取得したいのですが、どうすればよいのでしょうか?
0963nobodyさん2008/07/17(木) 14:41:57ID:???
>>962
mysql_fetch_assocとかその辺をマニュアルで
0964nobodyさん2008/07/17(木) 14:43:35ID:???
ああごめん列名って事なら、
SELECTとかする前に何かのクエリ送っとくなりなんなりしておかないと
いけなかったはず
0965nobodyさん2008/07/17(木) 14:44:51ID:???
mysql_fetch_field でとれるべ
0966963=9642008/07/17(木) 14:46:15ID:???
>>965
ほんとだw
ありがとう

>>962
ごめんね

俺死ね
09679622008/07/17(木) 15:05:52ID:???
>>965
ありがとうございます!
そのままググったられ日本語例文付サイトに辿り着きまして順調に進みそうです!

>>963
いえいえ、教えてあげようと気持ちだけでもありがたやです。
ありがとうございます。
イ`
0968nobodyさん2008/07/17(木) 17:33:15ID:???
共通のPHPを/cgi-binから読んで実行したいんだけど、
以下みたいな記述なら実行されるんだけど、
echo @file_get_contents("http://localhost/cgi-bin/sub.php");

http://localhostを省略すると実行されない。
phpで、他のディレクトリの共通サブルーチンは
読めないの?
0969nobodyさん2008/07/17(木) 17:44:00ID:???
つけない場合は、絶対パスまたは相対パスで、そこにたどり着けるように指定する。
0970nobodyさん2008/07/17(木) 17:46:16ID:???
ってこれだとファイルの中身が読めるだけだよ。
目的によっては別の手段使うほうがいいかも。
何がしたいのかな?
0971nobodyさん2008/07/17(木) 18:25:35ID:???
>>968
include 'path/sub.php';
0972nobodyさん2008/07/17(木) 19:35:32ID:???
<input type="text" name="hoge" value="今日の日付">

この「今日の日付」を YYYY-MM-DD形式にできないでしょうか?!?!

day=求めるスクリプト
<?php echo . $day. ?> とか色々やったのですが
そのまんま表示されちゃうです orz

index.htmlなんですけど 1からphpで書き直した方が早いでしょうかね?
0973nobodyさん2008/07/17(木) 19:37:32ID:???
>>973
日本語でおk
0974nobodyさん2008/07/17(木) 19:48:44ID:???
次スレ
http://pc11.2ch.net/test/read.cgi/php/1216291372/
0975nobodyさん2008/07/17(木) 19:54:58ID:???
>>972
何がしたいのか意味がわからないが
拡張子htmlをたんにphpにかえてphpにコード埋め込めばいいんじゃね

<input type="text" name="hoge" value="<?php echo date("Y-m-d"); ?>">
みたいに
レス数が950を超えています。1000を超えると書き込みができなくなります。