【PHP】質問スレッドpart19【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/07/16 07:12ID:KvHeypq/・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
抜けているものがあったら補足願います
0455nobodyさん
04/07/26 22:52ID:???アップロード元のhtmlで「enctype="multipart/form-data" 」
は指定されてるよね?
0456nobodyさん
04/07/26 22:59ID:???記述はいる筈だけど、それはRHL9(のRPMで入れた)なら
/etc/httpd/conf.d/php.confに書かれてるんじゃないかな。
.htaccessにも書けるし、設定は「上書き」であって
コンフリクトはしないと思うけど。
0457nobodyさん
04/07/26 23:10ID:ehBSQM9Lおながいします
0458Imo ◆.jC7ANgFY.
04/07/26 23:14ID:???所有者を自分にしたければCGI/perlから作ればよし。
0459388
04/07/26 23:19ID:sMxRgzIjもちろんマルチパートで送信しています。
手持ちのサーバの大部分はうまく動作しているのです。
最近引き継いだSAKURAインターネットのサーバのみダメな状態だったのです。
送信パケットでは正常なパケットを送信しつつ、ApacheからPHPにデータが渡る時点で倍に増えているような状況でした。
>454
php.conf にはAddTypeは書かれて居ないです。
入っていたのはLoadMduleとLimit関連、DirectoryIndexの3点だけでした。
grepしてみたのですが他にphpのAddTypeをしている箇所は無いようです。
何度か試しましたが[AddType application/x-httpd-php .php]を入れてhttpd再起動でサイズが倍に、
コメントアウトして再起動で正常なサイズでアップされます。
Apache,phpのバージョンの組み合わせの問題でしょうかね?
0460nobodyさん
04/07/26 23:42ID:???RedHat9にPHP4とGD入れるときのconfigureで、--with-gd --with-jpeg-dir=/usr/lib/したとき、
「configure: error: libjpeg.(a|so) not found.」ってエラー出る場合は、
「find /usr/lib -name libjpeg*」しても「libjpeg.so」が見つからないはず。
OSインストール時にパッケージの開発ツールで「Xソフトウェア開発」を入れれば解決。
</俺メモ>
0461nobodyさん
04/07/26 23:53ID:???RC1まではあってRC2で削除されたようですが。
よろしくお願いします。
#interfaceよりnamespaceの方が欲しかった・・・
0463nobodyさん
04/07/27 01:45ID:???0464nobodyさん
04/07/27 02:02ID:???0465nobodyさん
04/07/27 02:12ID:???あ,データA,データB,
い,データA,データB,
う,データA,データB,
としているデータを?id=あ
で一行目の列のみ検索して一致した場合その行のデータを取得して配列?に入れて表示したいんですけど教えて下さい。
適当に書いてみたんだけど↓(つд⊂)エーン全然ちがうよね??
<?PHP
$file_data = file("data.csv");
foreach ($file_data as $temp_line){
preg_match('/$id/',$temp_line,$parts);}
{
$parts = explode(",",$temp_line,4);
$name1[] = $parts[0];
$name2[] = $parts[1];
$recipe[] = $parts[2];
$comment[] = $parts[3];
}
?>
0466nobodyさん
04/07/27 04:03ID:???全然ダメ
そのものズバリ書くのも何なのでヒントを
preg_match の部分が変だし、preg_match は if 文じゃない。
foreach のループの中身もおかしい。
超初心者なら、まずプログラムの書き方を覚えないと
どっかで配布されているスクリプトを拾ってきて、それを読むのがいいかも
0467465です
04/07/27 05:13ID:???丁寧な解説ありがとうございます。
やはり基礎からやった方がいいのですね(ノД`)シクシク
頑張ってPHP覚えます。
あと、超初心者向けのPHP入門みたいなホームページをご存知でしたら教えて下さい。
0468nobodyさん
04/07/27 08:47ID:???0469nobodyさん
04/07/27 09:05ID:???コイツ最悪だ
0470nobodyさん
04/07/27 09:41ID:???スルーしとけば伸びてこないし何れ滅びる
0474nobodyさん
04/07/27 10:52ID:???includeで他ファイルを読み込むとき、
perlで書かれたCGIを呼び出すことは出来ますか?
試してみるとエラーが出たのですが、なにぶん初心者のため、
構文が誤っていた可能性もあって‥。
<? include("./cgi/bbs/bbs.cgi"); ?>
と記入したのですが
failed to open stream: Permission denied
for inclusion (include_path='.:/usr/local/lib/php')
の2つのエラーが出ました。
phpのパスが出ていたのでphpからperlは呼び出せないのかと‥
0475nobodyさん
04/07/27 10:54ID:???0476nobodyさん
04/07/27 10:57ID:???0477nobodyさん
04/07/27 11:06ID:???0478nobodyさん
04/07/27 11:09ID:???$id = $_GET['id'];
$file_data = file("data.csv");
foreach ($file_data as $temp_line){
if(preg_match("/$id/",$temp_line)){
$parts = explode(",",$temp_line);
$name1[] = $parts[0];
$name2[] = $parts[1];
$recipe[] = $parts[2];
$comment[] = $parts[3];
}
}
var_dump ($name1,$name2,$recipe,$comment);
?>
できたー俺もPHP勉強中!
0479軟式PHP
04/07/27 13:02ID:???$qvId = $_GET['id'];
$fp = fopen("data.csv","r") or die("(;´A`)");
while( $strData = fgetcsv( $fp, 1000, "," ) ){
if( $strData[0] == $qvId )
{
list($name1,$name2,$recipe,$comment) = $strData;
break;
}
}
fclose($fp);
echo $name1.$name2.$recipe.$comment;
?>
0480nobodyさん
04/07/27 14:19ID:???form から submit したときに文字化けします。
form のあるファイルは SJIS ですが、恐らく文字コードの問題ではないです。
文字化けというより、\記号(0x5C)もしくはそれを含む漢字の0x5C部分 がだぶって取得される、という現象です。
たとえばフォームに "\100" と入力すると、$HTTP_POST_VARS['xxx'] は "\\100" となりますし、
"ソノタ" を入力すると "ソ\ノタ" と取得されます("ソ" は SJIS で 0x83,0x5C)。
どこに問題があるかわかりますか?
0481480
04/07/27 14:20ID:uLhfG1jOageさせて。
0484nobodyさん
04/07/27 14:32ID:???URLを指定した、Webサーバ経由のincludeなら可能。
つまりcgiの出力結果のinclude。リモートファイルの
直接的なincludeになるので、セキュリティには気をつけること。
#リモートの出力が常に信頼できるものなら良いが。
0486Imo ◆.jC7ANgFY.
04/07/27 14:38ID:???ちょっと簡略化すればこんな感じかな。
$name1==$idの時という判断なら下のようなプログラムがいいかも。
# チェックせずベタで書いたから修正必要かもしれない
$id = preg_quote($_GET['id']); $k = ',([^\\,\\n]*)';
preg_match_all("/^($id)$k$k$k.*\$/m", file_get_contents('./data.csv'), $match, PREG_PATTERN_ORDER);
list($parts, $name1, $name2, $recipe, $comment) = $match;
var_dump($name1,$name2,$recipe,$comment);
0487軟式PHP
04/07/27 14:39ID:???0488Imo ◆.jC7ANgFY.
04/07/27 14:42ID:???こんなことしてみればいかが。# localhostについては検索すること。
include('http://localhost/〜');
でも出力だけしたいのであれば
echo file_get_contents('http://localhost/〜');
のほうがオススメ。
0489nobodyさん
04/07/27 14:52ID:VW36b+BW<IfModule mod_php4.c>
php_flag output_buffering Off
php_flag magic_quotes_gpc Off
php_value default_charset Shift_JIS
php_value mbstring.language Japanese
php_value mbstring.internal_encoding SJIS
php_value mbstring.http_input auto
php_value mbstring.http_output SJIS
php_flag mbstring.encoding_translation On
php_value mbstring.detect_order auto
php_value mbstring.substitute_character none
</IfModule>
文字コードをSJISで保存・出力したいのですが、これをディレクトリに置くと500エラーになってしまいます。
どうすれば良いでしょうか?
0490nobodyさん
04/07/27 15:01ID:???0492nobodyさん
04/07/27 16:02ID:???PHP+MySQLで日本語検索やりたいんですが、
レコード数が数十万件から100万件程度になると、
WHERE カラム名 LIKE '%検索したい文字%'
ってだけで救いようのないぐらい遅くなります。
なんかアイデア・対処方法は無いでしょうか?
MySQL頼みのFULLTEXTサーチは
日本語NGでしたし・・・。
0493492
04/07/27 16:11ID:???全角英数を半角にとか、
カタカナをひらがなにとか。
0494nobodyさん
04/07/27 16:16ID:???100万件でそんなに遅くなったっけか。Psqlなら遅くなりそうだが…。
インデックス効いてる?
0495492
04/07/27 16:27ID:???お返事ありがとうございます。
LIKE の 頭に ワイルドカードが入ると、
インデックスが効かないのです。
これはMySQLの仕様のようです。
100万件でインデックス効かないから遅いのは当たり前なんですが。
0496nobodyさん
04/07/27 16:40ID:???頭にワイルドカード入ってりゃ全件総ナメに決まってんべ
0497Imo ◆.jC7ANgFY.
04/07/27 16:44ID:???アイディアだけ。遅くなる率は高いけどもしかしたらというわけで。
・phpでbin2hexしたデータを追加し、それにFulltextIndexをかける。
データが2倍になるという欠点がある。
・2バイト文字列を2バイト英数字に変換し(不可逆)、それにFulltextIndexをかける。
意味不明なデーターがひっかかる可能性がある。
・独自で頻度表を作ってみる。
頻度表でどこまで処理できるかが問題。
・namazuを見習って単語リストを作ってみる。
とりあえず面倒。
0498492
04/07/27 16:54ID:???FulltextIndexですかね。やっぱり。
普通は LIKE '%キーワード%' よりは速くなるらしいですね。
ただ、スペースなどで単語を区切らないといけないので、
chasenとか外部プログラムが必要になるのですが、
ここら辺のサンプルなんか紹介しているようなWebページないでしょうか?
perlだと Text::ChaSenなんてモジュールがあるらしいですが・・・
0499nobodyさん
04/07/27 17:15ID:A3g22VFK上記のサイトを参考にして、複数のニュースサイトのヘッドラインを取得、
静的生成するスクリプトを作ってみました。
サイトを複数指定した場合、最終行に書かれたサイトのみしか取得できないのですが
どこか間違えているのでしょうか…?
どうぞ、ご教授お願い致します…。
sample.dat --------------------
%<a href=\"(.+?)\">(.+?)</a>%|http://www.yourdomain.com
%<a href=\"(.+?)\">(.+?)</a>%|http://www.hogehoge.net
0500nobodyさん
04/07/27 17:15ID:A3g22VFK<?php
define(HTML_FILE, "sample.html");//出力するファイル名
define(DAT_FILE, "sample.dat");//ログファイル
$urllist = file(DAT_FILE);
while(list(, $val)=each($urllist)) {
$list = explode("|", $val);
if ($fp = @fopen($list[1], "r")) {
while (!feof($fp)) $data .= fgets($fp, 1024);
fclose($fp);
}
$match_count = preg_match_all($list[0], $data, $items);
for ($i=0; $i< $match_count; $i++) {
$item_url = $items[1][$i];
$title = $items[2][$i];
$title = strip_tags($title);
$output .= "<a href=\""
.$item_url ."\" title=\""
.htmlspecialchars($title) ."\">"
.htmlspecialchars($title) ."</a><br>";
}
}
$fp = fopen(HTML_FILE,"w");
fputs($fp, $output);
fclose($fp);
?>
0501軟式PHP
04/07/27 17:45ID:???0502nobodyさん
04/07/27 18:06ID:???とりあえず、$dataの初期化が欲しいと違うことを言ってみる。
で、正解はファイル名に\nが入っているから。
0503nobodyさん
04/07/27 18:48ID:???printデバッグ汁
0504nobodyさん
04/07/27 19:21ID:???file() で読み込むと行の最後にある改行まで変数に入る。
rtrim() で不要な改行を取り除けば大丈夫。
$list = explode("|", rtrim($val));
0508nobodyさん
04/07/28 12:37ID:1Y3BKvIO職場で爆笑した責任を取ってもらおうか...
0509nobodyさん
04/07/28 13:52ID:???0510nobodyさん
04/07/28 20:43ID:???AddType text/html .php を記述すればphpがテキストとして
扱われると聞いたのですが、逆にテキストとして扱わない場合(PHPとして扱う)
はどういう書き方があるのでしょうか?
0511nobodyさん
04/07/28 20:46ID:EvRrHsANこれを 60 x 60 の画像に縮小→切り抜きし、abc001_a.jpg・abc002_a.jpgといった風に
リネームする必要ができました。
どうするのが一番効率が良いでしょうか?
縮小・リネームだけなら、ソフトとPerl・PHPスクリプトを連携して出来るのですが、
切り抜きが入ると、全く方法が思いつきません。どなたかご教授ください。
画像サイズは 160 x 120 とか、縦横比率がバラバラなので、切り抜きが必須なのです orz
0512511
04/07/28 20:47ID:???0513nobodyさん
04/07/28 20:54ID:???imagecopyあたりが適当じゃなかろうか?
0514nobodyさん
04/07/28 21:02ID:???してくれるのでしょうか?
それとも呼び出されたファイルだけでしょうか?
0515nobodyさん
04/07/28 21:22ID:???PHPをモジュールとして組み込んでいる場合は、application/x-httpd-php
CGIの場合は、application/x-httpd-cgiとすることもある。
(application/x-httpd-phpで処理させるように設定することも可)
0516nobodyさん
04/07/29 08:53ID:???タイプを固定する意味がないという。
0517軟式PHP
04/07/29 09:49ID:???0518nobodyさん
04/07/29 14:47ID:VlhsQ7NZregister_shutdown_functionで登録した関数呼び出されない?
0519nobodyさん
04/07/29 14:53ID:???0520nobodyさん
04/07/29 16:51ID:???0521nobodyさん
04/07/29 17:11ID:???関数のバイナリじゃなくて。
0522nobodyさん
04/07/29 17:11ID:???0523nobodyさん
04/07/29 17:27ID:???0524nobodyさん
04/07/29 17:42ID:???0525nobodyさん
04/07/29 17:45ID:???0526nobodyさん
04/07/29 18:00ID:???0527nobodyさん
04/07/29 22:38ID:???にファイルを添付したいのですが、これ可能でしょうか?
できるとしたら、どのエンコードをし、どういう送信ヘッダを作ればいいんでしょうか?
0528nobodyさん
04/07/29 23:17ID:???0530nobodyさん
04/07/29 23:43ID:b7+JpvL1以下プログラムを実行すると
Error while parsing the document\n
とエラーになってしまいます。
一体何がいけないのでしょうか?
<?php
if(!$dom = domxml_open_file("test.xml")) {
echo "Error while parsing the document\n";
exit;
}
?>
test.xml
<?xml version="1.0"?>
<root>
<test>this is test</test>
</root>
0531nobodyさん
04/07/29 23:43ID:???http://oshiete1.goo.ne.jp/kotaeru.php3?q=817797
>hogehoge.phpが、メールサーバーにソケット接続、マルチパート処理し、ウェブコンテンツを更新
ちょうど↑と同じようなことなんですが、
ケータイからメール(添付付)をメールサーバーに送り、phpが実行された時にPOPサーバーから受信、
同時に添付ファイルをエンコしてwebサーバーにPOSTし、本文には添付ファイルへのリンクなどを
挿入した状態でPOSTしたいと思ってます。
ケータイでの投稿に対応していないblogになんとかケータイから投稿したいと思ってます。
簡単に言うと写メールBBSのphpの機能にwebサーバーへのPOST的処理を付け加えたという感じです。
やはり、エンコードデータはブラウザに作らせないとダメなんですかね・・・。
0532nobodyさん
04/07/30 01:59ID:???fsockopen() とかを使って決まった形式でデータをエンコードして通信すれば可能。
フォーマットは RFC あたりを見て勉強するか、POST を行う際の通信データをキャプチャ
して解析すればできそう。
または curl 関数あたりを使ってもおそらく添付ファイル付きの POST は可能みたいな
感じがする。試していないので間違っているかもしれないけど。
でも、わざわざ POST しなくても FTP とか SCP でファイルとデータを送っても問題なさそう
な気がする。
0533nobodyさん
04/07/30 03:23ID:lnH8lc1CHTTPヘッダから取得するという方法では、対象が複数の場合、
非常に遅くなってしまいます。
他に方法はないでしょうか?どうぞよろしくお願いします
0535533
04/07/30 03:32ID:lnH8lc1C参考にしたページはこちらなんですが
もう少し簡略できませんでしょうか?
0537nobodyさん
04/07/30 03:57ID:???GETメソッドではなくてHEADメソッドで更新日時を取得する。
でも、まあ取得に時間が掛かるのは各々のHTTPコネクション
におけるネゴシエーション処理とかだから、別のプログラムを
組んで同時に複数処理するようにでもしないと、目に見えて
速くはならないよ。
0538537
04/07/30 04:00ID:???0539nobodyさん
04/07/30 05:12ID:mTOZKk4EWindows XP Home Edition のサーバーです。
unlink でファイルを削除しようとすると、
Permission denied とエラーが出てしまいます。
そのファイルのあるフォルダの読み取り専用属性のチェックは
はずしているのですが・・・。
0540539
04/07/30 05:29ID:???fcloseで閉じるのをわすれていました。
0541軟式PHP
04/07/30 09:15ID:???0542nobodyさん
04/07/30 09:41ID:Qj3jxbbrexecを使ってTXTファイルをPSファイルに変換すると
日本語部分が文字化けしてしまうんですが
なんとかならないものでしょうか??
コマンドラインからTXT>PSは文字化けしないのですが・・
0543nobodyさん
04/07/30 09:46ID:???どうやるのが理想的でしょうか?
1文字ずつ抜き出して<br>を加えて行くしかないのでしょうか?
0544nobodyさん
04/07/30 09:54ID:???$array = preg_split("//",$text);
$text = implode("<br>",$text,-1,PREG_SPRIT_NO_EMPTY);
0545nobodyさん
04/07/30 09:55ID:???$array = preg_split("//",$text,-1,PREG_SPRIT_NO_EMPTY);
$text = implode("<br>",$array);
0546nobodyさん
04/07/30 10:22ID:???早々なお返事、ありがとうございます。
教えて頂いたものを弄って動く様になりました。
PREG_SPRIT_NO_EMPTYというのが気になってぐぐって調べてみたのですが
ヒットしませんでしたし、私の環境では使えない様でした。
特殊環境なのでしょうか?。
0548nobodyさん
04/07/30 11:08ID:???HTMLに表示する時ってどうすればいいですか?
知ってる人教えて〜
0552nobodyさん
04/07/30 11:39ID:???デリミタが抜けている。
$text = preg_replace("/(.)/","$0<br>",$text);
でも、日本語が入る場合は、mb_ereg_replace を使った方が安全かも。
$text = mb_ereg_replace( "(.)", "\\1<br>", $s );
0553nobodyさん
04/07/30 11:57ID:8Ir+KZbtそんなことってあるのか?
0554548
04/07/30 11:58ID:???■ このスレッドは過去ログ倉庫に格納されています