2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

PHP助けて...

1 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:45:31.338 ID:hH6gimQv0.net
dat落ち早すぎるよ...

2 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:46:13.934 ID:hH6gimQv0.net
当方、web系プログラム初心者です
PHPを使ってローカル内のCSVをアップして、MySQLにインサートする処理をしたいのですがファイルのアップ処理で躓いています
HTMLあたりの処理から自信なくやってるため、
PHP以前にHTMLの要因もあるかもしれませんが、どなたかご教示願えませんか?

3 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:46:55.934 ID:sSxITLP/0.net
時間帯が悪い

4 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:47:05.860 ID:FvtqnL7P0.net
3回目か、10分放置すればスレも落ちちゃうよ

5 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:47:07.031 ID:hH6gimQv0.net
■HTML側のフォーム

<form method="post" action="index.php" enctype="multipart/form-data">
<!-- CSVインポートフォーム-->
ファイル選択:<input name="imortFile" type="file"/><br>
<input type="submit" name="btn_exeImprt" value="インポート">
</form>


PHP文書くとエラーでレスできないのかな?

6 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:47:30.180 ID:VW2TweM30.net
ググればあるだろ

7 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:48:14.853 ID:hH6gimQv0.net
うぅ...
休日のこの時間帯は仕方ないか...


■PHP
/*
if(isset($_POST['btn_exeImprt'])){

$res2 = "";

//【1】ファイル入力チェック =========================================================
if (isset($_FILES['file']['tmp_name']) == FALSE) {

//※※ファイル入力がない場合に処理したい内容があれば処理
$res2 = "ファイルが入力されていません。";

//【2】CSVファイル取込 =======================================================
} else {

$sql_Insert = "";
$ins_values = "";
$delimiter = ','; //CSV区切り文字

if ($_FILES['file']['size'] == 0) {
$res2 = 'Error! - 指定したファイルが見あたりません';
}

$source_file = $_FILES['file']['tmp_name']; //アップされたCSVファイル

if (($infp = fopen($source_file, 'r')) == FALSE) {
echo 'Error! - サーバ・トラブルが発生しました';
}

//ロケール設定
$str = fgets($infp);
if (($enc = mb_detect_encoding($str)) == FALSE) {
echo 'Error! - 文字コードが判定できません';
}
〜〜〜
*/

閉じ括弧の数はもちろん合わせてある

8 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:49:53.380 ID:w8WD2fHP0.net
pastebin に貼れよ、やり直し

9 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:49:57.922 ID:hH6gimQv0.net
>>6
サーバー辺りの情報が一致しないのか
ファイルがアップされないんだよ
$_FILESにまでいってる感じないからHTMLのFormあたりが原因なのかな?
と思ってたりで、解決法わからなくなってスレ立ててる

10 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:51:37.077 ID:hH6gimQv0.net
>>8
コメントアウトのおかげなのか分からないけど
コード貼れてるからとりあえずよし

11 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:52:29.373 ID:FvtqnL7P0.net
エラーとか出てないの?

12 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:53:15.400 ID:Xz2NuePv0.net
コード読んでないけどディレクトリの操作権限とかは

13 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:53:22.433 ID:13eumnFz0.net
データベースのタイムアウトです

14 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:53:34.284 ID:sSxITLP/0.net
html全然触れてないんだけどinputって最後にスラッシュいったっけ

15 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:53:36.201 ID:hH6gimQv0.net
参考に下記サイトも見てる
http://www.pahoo.org/e-soul/webtech/php01/php09-01.shtm

サンプルをローカルにおいて実行したら、
エラーが起きるしで、解析まで行きつかない...

16 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:53:45.534 ID:nTOgWPA70.net
ぬる

17 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:53:57.688 ID:nTOgWPA70.net
即死回避

18 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:54:32.219 ID:bdmjpGica.net
$_POSTをprint_rで見て見れば?

19 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:55:39.287 ID:hH6gimQv0.net
>>11
エラーはでるけど、
シンタックスエラー?や未定義などでわけがわからなくなってます

>>14
あ、これはphp内にechoで記載していたもののゴミです

20 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:56:34.059 ID:hH6gimQv0.net
>>18
print_rですか

使い方わからないのでググるけども
またdatお乳しそうで怖い...

21 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:57:06.972 ID:sSxITLP/0.net
シンタックスエラーならどっかの構文がおかしいんじゃろ

22 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:57:23.890 ID:ZlIXmH2O0.net
ここまできたら2時間放置しなきゃ落ちないから安心してググってこい

23 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:58:42.225 ID:FvtqnL7P0.net
シンタックスエラーってターミナルでエラー出てるんだよね?
何行目がおかしいか書いてないの?

24 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 03:58:58.907 ID:/2WjXxAkp.net
言語知らないけどパッと見てtmp_nameはimpotFileじゃね?と思った

25 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:00:44.047 ID:bdmjpGica.net
エラーログ見れば何行目がおかしいかわかるでしょ

26 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:00:45.891 ID:hH6gimQv0.net
print_r
はデバッグ用で変数の中身みれるってことでいいのかな?
JAVAやVBとかみたくメッセージボックスで簡単に中身チェックできなくて
確認方法でも困ってます

他のIDEはNetBeans使ってるけど、
これで

27 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:02:21.662 ID:FvtqnL7P0.net
>>15
ローカルってどういう意味?
LAMP環境でやってるんだよね?

28 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:03:04.682 ID:hH6gimQv0.net
>>23
書いてはありますけど、
本ソースが乱れて糞なので全貼はご容赦願います...

Warning: fopen(): Filename cannot be empty in XXXXX\index.php on line 194

該当箇所は
if (($infp = fopen($source_file, 'r')) == FALSE) {

29 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:03:04.848 ID:bdmjpGica.net
>>26
その通りです

30 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:04:48.721 ID:hH6gimQv0.net
>>27
LAMP環境?
XAMMPでローカル内のファイルをlocalhostから見るようにしてます
あとで頼まれ元のサーバに上げる予定ではいますけど

31 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:07:43.112 ID:nTOgWPA70.net
2時間じゃあなくて1時間じゃあなかったか?

32 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:08:48.463 ID:FvtqnL7P0.net
>>28
var_dump($source_file)
exit;

これをエラー出てる行の1行うえに書いて何が出る?

33 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:09:25.874 ID:hH6gimQv0.net
気のせいかもしれないけど

//【2】CSVファイル取込 =======================================================
} else {

ここのelseにファイルがない場合も処理されてる感じがするんだが、、、
頭が頭痛で痛いよ...

34 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:10:06.958 ID:FvtqnL7P0.net
>>28
var_dump($source_file);
exit;

やっぱこっち、セミコロンわすれた

35 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:10:49.070 ID:hH6gimQv0.net
>>32
Notice: Undefined variable: source_file in C:\xampp\htdocs\index.php on line 188
NULL

ガッ!!
何も入ってないっぽいですね

36 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:11:27.474 ID:sSxITLP/0.net
宣言されてないんじゃん

37 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:14:50.260 ID:bdmjpGica.net
だからPOSTの中身全部見りゃいいじゃん

38 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:16:17.422 ID:hH6gimQv0.net
>>36
そうみたいですね...
変数追加しましたが
inputの入力確認用と思って書いてる下での中にずっと入って
その後進む気配ないです...



//【1】ファイル入力テキストボックスチェック =========================================================
if (isset($_FILES['imortFile']['tmp_name'])) {
$res2 = "ファイルが入力されていません。";

39 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:17:35.003 ID:hH6gimQv0.net
>>37
すまん。
マジでPOSTやGETとかWEB系のことなんもわかってないんです...

40 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:21:49.345 ID:hH6gimQv0.net
ファイルを選択しても、選択しなくても
>>38
「ファイルが入力されていません。」
が表示されますね...
これファイル遅れてないってことですよね?

41 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:24:12.530 ID:bdmjpGica.net
print_r($_POST);
でhtml側がなんて名前で返してきてるかわかるよ

42 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:24:43.683 ID:hH6gimQv0.net
ん?入力確認処理はこちらなのかな?


//【1】ファイル入力テキストボックスチェック =========================================================
if (isset($_FILES['imortFile']['error']) == 0) {

43 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:27:46.986 ID:hH6gimQv0.net
>>41
おお!
どのボタンを押されたのか判断できるんですね!

44 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:28:52.236 ID:hH6gimQv0.net
エラーコード見たら0のみ通さなきゃいけないから逆じゃないか…

http://so-zou.jp/web-app/tech/programming/php/file/upload/

45 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:31:31.996 ID:FvtqnL7P0.net
とりあえず色々var_dumpしてデバッグしたらいいよ
眠過ぎるからおやすみー

46 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:32:52.932 ID:hH6gimQv0.net
だめだ
一人で暴走してまた処理がわけわからなくてなってます・・・

47 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:33:46.441 ID:hH6gimQv0.net
>>45
ありがとうございます
ただ、デバッグしても基礎がない中やってるから、解析までに至っていないという...

48 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:37:15.948 ID:hH6gimQv0.net
if (isset($_FILES['imortFile']['error']) == 0) {
はissetの抜き忘れですね・・・

49 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:39:59.368 ID:hH6gimQv0.net
そして
Error! - 文字コードが判定できません
が出てvar_dumpでも判断がつかない...

50 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:42:08.346 ID:hH6gimQv0.net
独りよがりなレスしかしていないので
お優しい方々はすでに去られてしまったのかな?

51 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:43:02.261 ID:bdmjpGica.net
issetは普通TRUE/FALSEで聞くから上で合ってるよ
0でもfalseと見なされるから大丈夫だけど

52 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:47:33.020 ID:cuC4rMcL0.net
imortFile?ファイル名抜けてるンじゃ?

53 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:47:33.372 ID:hH6gimQv0.net
>>51
ありがとうございます!!

あとは文字コードあたりの解決
なんですねかね?
ここまで自信なくコーディングしてるのは本当に申し訳ないです

54 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:49:07.647 ID:hH6gimQv0.net
>>52
確かに抜けてますね...
私おんぼろ過ぎでしょ・・・

55 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:49:19.547 ID:6Mg/jgPs0.net
PHP歴19日の俺にまかせろー

56 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:51:41.542 ID:+l9TECfDp.net
プログラマ20年やってるけど、そのレベルのことで人を巻き込むことをまず改めたほうがいいかも

57 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:53:53.427 ID:hH6gimQv0.net
>>55
ありがとうございます

>>56
重々承知してます
ただ、身近にPHPの使い手いないので、
もう藁をもすがる気持ちでやってます

58 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:54:36.077 ID:0I6zxlhY0.net
Webはただの言語の知識以外に通信の基本的なことを知る必要がある
とはいっても1時間程度調べれば大体わかる

59 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:57:06.143 ID:ZlIXmH2O0.net
>>58
そのとっかかりとしてはどんなこと調べればいいの?
一応3分間ネットワーキングってサイトで勉強してみようかと思ってるんだが

60 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:57:21.013 ID:hH6gimQv0.net
>>58
COBOL、VB、Java、Shellは経験あるんですが、
どうも通信部分はイメージが湧きにくいです...

不向きなのかもしれませんね

61 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 04:59:43.104 ID:bdmjpGica.net
未定義の変数を代入したあとfopenしてるのかな
まずif文でどっちに行ってるかecho文とかで何か表示でもして落ち着いて見たほうがいいよ

62 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:03:48.032 ID:hH6gimQv0.net
>>61
お言葉ありがとうございます
fopenにあたるところの処理で
Error! - サーバ・トラブルが発生しました
が表示されていないので、
そこは問題なくと思っていますが違いますかね?

一応、テスト用のcsvファイルの内容は、文字化けしてますが表示はされています

63 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:04:03.898 ID:6Mg/jgPs0.net
おいちゃんテキストと講義ノートをせっせと改訂してる途中だからしばらくつきあえるけど
どこで詰まってるのかスレおってもいまいちわからんw

64 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:05:34.794 ID:bdmjpGica.net
>>62
読めたのね

65 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:06:55.849 ID:6Mg/jgPs0.net
PHPのうp処理の罠にphp.iniの設定でうp制限やサイズ制限かかっとる場合があるw

66 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:07:02.396 ID:ZlIXmH2O0.net
つーか今更このスレ読んだんだけどさ
SplFileObject使わないの? もし使えないくらい古いPHPなら悪いけど
http://php.net/manual/ja/class.splfileobject.php

SplFileObject CSV
とかでググったら楽になるかもよ

67 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:08:35.726 ID:hH6gimQv0.net
>>63
おいちゃんだいちゅき

>>7のロケール設定のところですね

>>64
そうみたいですね
サンプル貼り付け後の解析というような屑な作り方しているだけに本当に助かります
ロケール設定で文字コードがうまくあつかえてないんですかね。。。

68 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:14:45.486 ID:0I6zxlhY0.net
get、post、cookie、session、ヘッダ、リクエスト、レスポンスとか分かれば一応楽になるかも
ってか最初はサンプルをまんま貼り付けて実行するとこから始めたほうが早いのでは

69 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:15:05.373 ID:hH6gimQv0.net
>>66
なんですかそれは?
文字コードさえ解決すれば
CSV読み取りにはなりますが...

70 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:15:29.220 ID:bdmjpGica.net
文字コードはマルチバイトコンバートのほかにinternalなんとかなんとかって処理時に内部的に設定する命令が必要な場合があるよ
名前忘れたごめん

71 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:16:09.830 ID:hH6gimQv0.net
>>68
サンプル貼り付けてもうまくいかなった罠...
http://www.pahoo.org/e-soul/webtech/php01/php09-01.shtm

これのテーブル部分をSQLに置き換えるだけと思っていたので...

72 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:23:07.141 ID:6Mg/jgPs0.net
きちんとテンポラリへファイルが逝ってることは確認できたんやね
なら一応テンポラリディレクトリでうpされたファイルの実体を直接しらべてみ
php.ini の upload_tmp_dir の項目にテンポラリファイルどこに作るかあるから
実体が壊れてないかうp前のファイルとdiffするもよしmd5sum でハッシュ比較するも良し

73 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:23:36.845 ID:hH6gimQv0.net
文字のエンコーディングっているんですよね?
mb_detect_encoding
http://php.net/mb_detect_encoding


>>68
助言ありがとうございます
ただ、私情ではありますが優先的にこの処理だけは解決しないといけないので...

74 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:25:20.270 ID:hH6gimQv0.net
>>72
そうですね
それらしいものが
C:\xampp\tmp\php178F.tmp
というように確認取れました

75 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:26:48.780 ID:6Mg/jgPs0.net
ああwindowsだとmd5sumとかつかえねーな
秀丸あたりだとエンコーディング判定強いから
その辺のエディッタで開いてみそ

76 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:27:10.700 ID:hH6gimQv0.net
あれ?
場所は確認できたけど肝心のファイルがない・・・
処理を途中で止めるなりして確認ってことなのかな?

77 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:27:37.792 ID:hH6gimQv0.net
>>75
サクラは入ってます

78 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:28:16.075 ID:0I6zxlhY0.net
って今さら>>1から読んでみたんだけど、file以前に文字列のやりとりはできてる?
あと、テストするときはhtml側からsubmitしてこのエラーが出てるということでいいんだよね?

79 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:28:47.027 ID:6Mg/jgPs0.net
あと$_FILES['userfile']['error'] でエラーコードとれるから0以外なら異常終了やで

80 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:28:58.577 ID:0I6zxlhY0.net
あぁもう確認できてるのかスマソ

81 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:31:30.185 ID:hH6gimQv0.net
>>79
助言ありがとうございます
途中から
始めのファイル取得処理で
0以外は対象のファイルないとかのメッセージ出して扱ってます

82 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:33:02.918 ID:bdmjpGica.net
まずhtmlのheadタグで文字コードを明示しているか、明示している文字コードと今書いてるhtmlファイルとphpファイルの文字コードが同じか確認したほうがいいよ
htmlではutf-8って書いておきながらソース自体はshift-jisだったりすると文字化けするよ
あと肝心のcsvファイルも

83 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:34:43.891 ID:hH6gimQv0.net
>>82
ありがとうございます

phpは
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

htmlは
<meta charset=\"utf-8\">

です

84 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:34:45.990 ID:6Mg/jgPs0.net
テンポラリにできたファイルをエディッタのエンコーディング設定替えながらぽちぽち開いて
きっちりエディッタで表示できたら文字コード云々ってことが確定する
 
そこが確定したらスクリプト上の判定処理を削除して
エディッタで正常に開けたエンコーディングでとりあつかうようにするんや!
それができたらフレキシブルに様々な文字コードファイルに対応できる処理をつっこんだらいい

85 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:37:13.835 ID:hH6gimQv0.net
>>84
すみません
テンポラリはechoで見てたのですが
実際のフォルダに該当のファイルが見当たらないです...

NetBeansを使ってますが、デバッグモードがいまいち使い方わかっていないです

86 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:38:39.215 ID:6Mg/jgPs0.net
あれ?
C:\xampp\tmp\php178F.tmp はどこいった?

87 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:39:38.474 ID:bdmjpGica.net
ファイル名もう変わってるとか

88 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:41:38.229 ID:hH6gimQv0.net
>>86
echoでパスが表示されるまでの確認で
いざ
C:\xampp\tmp
を見てみると直近の更新時間のものはないです

89 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:42:25.316 ID:hH6gimQv0.net
そしてデバックモードでブレークポイント設定しても止まってくれない...

90 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:42:45.427 ID:6Mg/jgPs0.net
文字コード判定系は文字エンコード攻撃が猛威を奮ってから
壊れてるファイルは問答無用で失敗するようになったから
ファイルの内容自体が壊れてないか確認せなあかんで

91 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:44:49.962 ID:6Mg/jgPs0.net
$_FILES['userfile']['tmp_name'] ってフルパスだったっけ?

92 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:45:06.123 ID:0I6zxlhY0.net
まずは判定する文字列をprintしてみて、ブラウザでどう表示されるか見る
ブラウザの表示設定でutf-8が正解か確認

93 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:46:46.531 ID:bdmjpGica.net
確かhtmlでアップロードしたファイルってメモリにロードしたあとプログラムで勝手に消すんじゃなかったかな
file_put_contentsとかで別の場所にコピーしてみたら?

94 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:47:47.191 ID:ZlIXmH2O0.net
移動したいならfile_put_contentsよりこれかも
http://php.net/manual/ja/function.move-uploaded-file.php

95 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:48:50.665 ID:6Mg/jgPs0.net
自分が書いた解説サイトで確認したらPHPスクリプト終了と同時に削除されますってかいてたw
スクリプト中でcopyするなりmove_uploaded_fileで退避して確認してみてw

96 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:48:53.402 ID:hH6gimQv0.net
いろいろコメントいただけるのは大変ありがたいのです

ただ、確認順序がわからなくなって混乱気味です...

97 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:49:55.245 ID:bdmjpGica.net
>>94
これだわ

98 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:51:14.799 ID:0I6zxlhY0.net
>>96
コメントじゃなくてレスな
どうせここまで来てたらあとわずかで終わるから好きなやり方ですれ

99 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:56:14.096 ID:hH6gimQv0.net
>>94>>97
見てなんとなしに入れてエラー...
これはあかん

100 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 05:59:49.868 ID:hc0F3ZSo0.net
PHP使ったことないんだよな〜

101 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:02:11.123 ID:0I6zxlhY0.net
とりあえず最初の100文字とstrlenでだいたいの文字数は把握してんだろうな?
ファイル退避とかの前にまずprint戦法は基本

102 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:04:20.136 ID:6Mg/jgPs0.net
おーい生きとるかーw

103 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:04:46.870 ID:bdmjpGica.net
>>99
置けるディレクトリ決まってるんじゃなかったっけ確か
アパッチで設定してあるドキュメントルート配下とか

104 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:05:52.091 ID:hH6gimQv0.net
>>102
死亡中だね
デバッグのブレークポイント使えればコピーしなくてもいいかなと思ってたりしてる

105 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:10:12.474 ID:0I6zxlhY0.net
>>104から数分経つが・・・そろそろできたかな

106 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:13:18.633 ID:hH6gimQv0.net
>>105
...なんの進展もありませんでした


しいてあげるなら
以下の内容のCSVをアップすると

あ,亜,い,伊,う,宇,え,江,お,汚

以下が表示される

"��,��,��,��,��,�F,��,�],��,��"

107 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:20:15.897 ID:0I6zxlhY0.net
内容もきてて文字コードが違うだけってわけか
ほぼ終わったもんじゃねぇか
ブラウザで文字コード変えながら表示試してみたり、utf-8,shift_jis,その他もろもろの
それっぽい文字コードに変換を試してそれぞれをprintで出してみりゃいい

108 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:21:36.516 ID:bdmjpGica.net
utf-8をさらにutf-8で変換してないか?

109 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:24:29.969 ID:0I6zxlhY0.net
あと、>>99はエラーが出たけどfile_put_contentsはまだ試してないなら
どっかに書き込んでみるとか

110 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:25:25.963 ID:hH6gimQv0.net
うむむ...
終わりは見えてるとの発言をいただけているはずなのに
なかなか解決までの道筋が見えてこないでござる...

111 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:29:58.813 ID:6Mg/jgPs0.net
割と出揃ったから終わると思ったがまだかw
まぁマルチパートうpだからうp元のファイルそのもののエンコーディングに気をつけなあかんで
うp元のファイルエンコーディング確認しとるか?

112 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:31:30.728 ID:0I6zxlhY0.net
まぁ人は進捗が止まっているときに本当に成長するという
ガンガレ

113 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:31:52.763 ID:hH6gimQv0.net
>>111
SJISですね
UTF-8で保存しなおしたものは出力なりました

114 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:33:24.430 ID:0I6zxlhY0.net
ふぁ?

115 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:33:30.653 ID:bdmjpGica.net
文字化けは誰もが通る道です

116 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:34:08.613 ID:6Mg/jgPs0.net
進展なしかw
たぶんWinPHPはOSファイルロックはかけないはずだからスリープで止めてスクリプト終了前に手動で確認してみ
さくっと次のスクリプトに投げてみろい
たしかフィルタで入力時に自動変換というクソみたいなディレクティブあったけどデフォではOffだからそこはこの確認おわってからかな
ちょっとおやつ買ってくる
$uploadfile = "./bar.txt"; // 移動したいフルパス
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded. ", PHP_EOL;
} else {
echo "warning. failure uploaded. ", PHP_EOL;
}
echo "<pre>";
readfile($_FILES['userfile']['tmp_name']);
print_r($_FILES);
sleep(120); // 2分とめる!

117 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:34:47.463 ID:hH6gimQv0.net
>>114
説明不足ですみません

予定としてはSJISですが
念のためUTF-8で保存したファイルを試したら
そちらは文字化けなく出力できています

118 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:40:19.557 ID:hH6gimQv0.net
>>116
sleepで遅延してる間に無事TMPから取得できました
やはりSJISですね

119 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:41:31.007 ID:bdmjpGica.net
じゃあ文字化けはあたりまえ体操だな

120 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:43:00.241 ID:hH6gimQv0.net
その上で下記ですね...
// ロケール取得チェック
/* if (($enc = mb_detect_encoding($str)) == FALSE) {
var_dump($enc);
$res2 = 'Error! - 文字コードが判定できません';
*/

これ抜いたときの影響ってどうなんでしょう...

121 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:50:56.043 ID:6Mg/jgPs0.net
>>120
それは文字列からファイルの文字コードを類推して
文字コードを判定するものだから
上げられるファイルがSJIS前提なら問題ない
 
ただしSJISのマルチバイトは他の処理系でいろいろひっかかるから
SJISでデータベース等のミドルウェアに投げるのはおすすめはできないけどねー

122 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:52:27.756 ID:hH6gimQv0.net
>>121
プロトタイプとしては一旦省いても問題なさそうですね
一応、CSV出力処理はすでにいれてあって
それもSJISで出力、かつそのファイルをもとに取込ファイルを作成なので

123 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:56:33.367 ID:6Mg/jgPs0.net
そこの処理はエンコードを判定してエンコード文字列を取得して、
そのエンコード文字列を使ってご希望のエンコーディングに変換して
どんな文字コードのファイルが送られても同じエンコーディングに統一するってパターンだな。
変換処理が後続してないので恐らくセキュリティチェックで入れてるだけだとは思う
 
判定するだけならmb_check_encodingとかのほうが確実だったと思うが
そもそもmb系の判定はゴミで大学勤める前の現場で何回もmbstringのソース修正してはリビルドしてPHPに組み込んだ忌まわしい記憶がある

124 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 06:58:40.103 ID:hH6gimQv0.net
>>123
mb_check_encodingェ...

ひとまず継続予定のSQLにInsertさせる処理作成に移れるのかな...

125 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:00:14.101 ID:6Mg/jgPs0.net
まぁSJISで統一するなら次の一文に差し替えれば?
個人的にはUTF-8にしといたほうがDBとのやり取りで泣かないとおもうけどさw

if(!mb_internal_encoding($var, 'sjis')) {
〜SJISへ変換処理〜
}

126 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:02:31.732 ID:6Mg/jgPs0.net
あとなPHPにはmagic_quotes_gpcという死んだほうがいいディレクティブがあって
これがONになってるとSJISは死ぬ

127 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:06:39.779 ID:hH6gimQv0.net
SJISのそんなに糞とは...
優先的にはケース考慮より動作までのなので、
CSVデータもとにInsert文の作成ですね...

128 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:07:30.651 ID:mybmJWVk0.net
データベースの文字コードは?

129 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:15:49.925 ID:hH6gimQv0.net
>>128
UTF-8だったはず...
先にローカルのファイルパス直読みで試してたのをベースに調整考えてます

■先の作ってたもの
// 1行毎のINSERTデータ格納用
// $values = "";
// foreach ( $line as $line_key => $str ) {
//
// if( $line_key > 0 ){
// $values .= ", ";
// }
// // INSERT用のデータ作成
// $values .= "'" .mb_convert_encoding( $str, "utf-8", "sjis" )."'";
// }
//
// if( !empty( $ins_values ) ){
// $ins_values .= ", ";
// }
// $ins_values .= "(". $values . ")";
//
// //Inser文
// $sql_Insert = "INSERT INTO ※見せられないよ!!※ VALUES (" .$values .");";
//
//
// //SQL結果
// $pdo->prepare($sql_Insert);
// $stmt = $pdo->prepare($sql_Insert);
// $stmt->execute(null);
// mysql_query( $sql_Insert, $connect );
// }

130 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:17:47.975 ID:0I6zxlhY0.net
変換するならいいんじゃねぇの

131 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:19:37.888 ID:6Mg/jgPs0.net
抽象レイヤー経由でやってんならあとからどうとでもなるな
テストで使ってるDB製品はなに?

132 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:21:19.963 ID:hH6gimQv0.net
あれ?
ローカルの時は

//$file = new SplFileObject($filepath);
//$file->setFlags(SplFileObject::READ_CSV);

ってやってたけど、今の状態だと$filepathはどうすれば...

133 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:22:21.752 ID:hH6gimQv0.net
>>131
mariaDBですね
サーバーはMySQLです
互換あるとの情報信じて特になにかするということはかんがえていないです

134 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:33:27.810 ID:6Mg/jgPs0.net
こっちの野暮用ひととおり終わった

135 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:36:07.594 ID:hH6gimQv0.net
>>134
お疲れ様です

136 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:39:35.034 ID:0I6zxlhY0.net
終わったか

137 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:40:17.370 ID:6Mg/jgPs0.net
ざーっとみたがSplFileObjectってクソみたいな仕様だなw
ファイルストリームやファイルディスクリプタ渡せないとか実装した奴アタマおかしいw
インターフェースC POSIXに似せてたから
C使いには予想つきやすいライブラリだったんだけど迷走しとるなw
 
オーバーヘッド気にしないならテンポラリからファイル移動させて
そこからとりなさい

$var = file_get_contents($_FILES['imortFile']['tmp_name']);
// 処理系のイミフなマルチバイト文字殺しを殺す!
if (get_magic_quotes_gpc() !== NULL) { $var = stripslashes($var); }
// UTF8以外ならUTFに変換するぜ!
if(!mb_check_encoding($var, 'UTF-8')) {
$var = mb_convert_encoding($var,'UTF-8', 'SJIS,EUC-JP');
}
file_put_contents("保存したいファイルパスを書け!",$var);

138 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 07:45:51.862 ID:hH6gimQv0.net
>>136
まだなんですよね…

139 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 08:23:55.847 ID:hH6gimQv0.net
一先ずCSVのインサートまではできました
皆さん非常に助かりました

140 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 08:46:08.189 ID:6Mg/jgPs0.net
詰まってるようで実は詰まってなくて
詰まってるか詰まってるかわからなかったので
作業進まなかったって感じやったね
これを機会に解説ページ更新できたわ
やっぱりネックは魔境化してるマルチバイトのエンコーディングまわりなんやね・・・

141 :以下、\(^o^)/でVIPがお送りします:2017/03/20(月) 09:26:42.450 ID:hH6gimQv0.net
>>140
非常に助かりました
他の言語でアルゴリズムは大まかに組める経験得てるので
今回の目的のための部品の使い方がわからずに泣きついてしまってましたね
あとは、変数、定数が型指定が明示的にできな
いのがつらかったり...

とはいえ、サンプルの寄せ集めで組んだ感じなので
一旦プロト提出終わったら、各機能の解析がてら整理しようと思います
差し支えなければ、解説ページをご紹介いただけませんか?

総レス数 141
38 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★